
프론트엔드 개발자로서 '클로저'라는 단어는 많이 들어봤을 겁니다. 하지만 막상 클로저가 뭐예요?라는 질문에 선뜻 대답을 하긴 어렵습니다. 이렇게 개념이 모호하다 보니 실무에서도 내가 클로저라는 걸 쓰고 있는 건가? 그냥 말 그대로 개념적인 내용이지 실무에선 안 쓰이는 거 아닌가 하는 생각이 들었습니다.그러던 중 한 면접 시뮬레이션(https://github.com/CaesiumY/claude-interview-agents)을 해보면서 나왔던 첫 질문이 클로저가 무엇인지, 그리고 실무에서 사용한 사례가 있다면 설명해달라는 내용이었습니다. 호기롭게 면접 뿌셔보자..! 도전해 봤지만 바로 이 첫 질문에서 벽을 느꼈고, 클로저에 대해서 한 번 다시 공부해 보고 쉽게 정리하여 나와 같은 사람들이 더 이상 클로저를 무…
클로저를 MDN에서는 다음과 같이 정의합니다. '클로저는 주변 상태(어휘적 환경)에 대한 참조와 함께 묶인 함수의 조합이다.'예.. 그렇답니다... 복잡한 용어를 걷어내고 쉽게 표현해 보면 "자신이 태어난 고향(스코프)을 기억하는 함수" 라고 할 수 있습니다. 정확히는 '클로저 = 함수'는 아니지만, 이해를 돕기 위해 간단하게 표현해 봤구요! 이제 더 자세히 알아보도록 합시다..!
여기서 보이듯이 일반 함수 내부에 선언된 변수는 내부에서만 사용가능합니다. 함수가 종료된 후 함수 밖에서 접근하려고 하니 Uncaught ReferenceError가 발생해 버리죠!그 이유는 바로 스코프가 다르기 때문입니다. count 변수는 normalCounter 함수 스코프 안에서 선언되어 있고 이 함수가 실행이 끝나면 자연스럽게 메모리에서 사라지게 됩니다. 그러다 보니 normalCounter 함수 외부에서 참조하려고 하면 어디서도 확인이 안 되는 에러가 발생하는 것이죠.그렇기 때문에 함수 외부에서는 count 값에 절대 접근 못하고, 매번 함수가 실행될 때마다 0으로 초기화되는 상황입니다.