Frontend Archive

클로저 누구냐 너...

권시현
클로저 누구냐 너...

프론트엔드 개발자로서 '클로저'라는 단어는 많이 들어봤을 겁니다. 하지만 막상 클로저가 뭐예요?라는 질문에 선뜻 대답을 하긴 어렵습니다. 이렇게 개념이 모호하다 보니 실무에서도 내가 클로저라는 걸 쓰고 있는 건가? 그냥 말 그대로 개념적인 내용이지 실무에선 안 쓰이는 거 아닌가 하는 생각이 들었습니다.그러던 중 한 면접 시뮬레이션(https://github.com/CaesiumY/claude-interview-agents)을 해보면서 나왔던 첫 질문이 클로저가 무엇인지, 그리고 실무에서 사용한 사례가 있다면 설명해달라는 내용이었습니다. 호기롭게 면접 뿌셔보자..! 도전해 봤지만 바로 이 첫 질문에서 벽을 느꼈고, 클로저에 대해서 한 번 다시 공부해 보고 쉽게 정리하여 나와 같은 사람들이 더 이상 클로저를 무…

클로저를 MDN에서는 다음과 같이 정의합니다. '클로저는 주변 상태(어휘적 환경)에 대한 참조와 함께 묶인 함수의 조합이다.'예.. 그렇답니다... 복잡한 용어를 걷어내고 쉽게 표현해 보면 "자신이 태어난 고향(스코프)을 기억하는 함수" 라고 할 수 있습니다. 정확히는 '클로저 = 함수'는 아니지만, 이해를 돕기 위해 간단하게 표현해 봤구요! 이제 더 자세히 알아보도록 합시다..!

여기서 보이듯이 일반 함수 내부에 선언된 변수는 내부에서만 사용가능합니다. 함수가 종료된 후 함수 밖에서 접근하려고 하니 Uncaught ReferenceError가 발생해 버리죠!그 이유는 바로 스코프가 다르기 때문입니다. count 변수는 normalCounter 함수 스코프 안에서 선언되어 있고 이 함수가 실행이 끝나면 자연스럽게 메모리에서 사라지게 됩니다. 그러다 보니 normalCounter 함수 외부에서 참조하려고 하면 어디서도 확인이 안 되는 에러가 발생하는 것이죠.그렇기 때문에 함수 외부에서는 count 값에 절대 접근 못하고, 매번 함수가 실행될 때마다 0으로 초기화되는 상황입니다.