JavaScript의 Closure 란?
JavaScript의 Closure 란 무엇인지 알아보고 사용 방법에 대해서 알아보자.
Closure 이란 무엇인가?
Closure(클로저)는 JavaScript에서 매우 중요한 개념 중 하나다. Closure는 “함수가 선언될 당시의 렉시컬 환경(Lexical Environment)을 기억하고, 그 환경에 접근할 수 있는 함수”를 말한다.
다시 말해서, Closure는 내부 함수가 외부 함수의 변수에 접근할 수 있도록 만들어 준다. 이러한 특성 덕분에 함수 외부에서는 접근할 수 없는 데이터를 은닉하거나, 데이터를 유지하는 데 사용된다.
Closure 의 특징
- 함수 내부에서 정의된 함수는 자신이 정의된 환경(scope)의 변수에 접근할 수 있다.
- 외부 함수의 실행이 종료된 후에도 내부 함수는 외부 함수의 변수에 접근할 수 있다.
- 데이터를 은닉하고 캡슐화하는 데 유용하다.
Closure의 구조
innerFunction은 outerFunction이 종료된 후에도 outerVariable에 접근할 수 있다. 이것이 Closure의 핵심이다.
Closure의 활용
- 데이터 은닉 및 캡슐화
Closure를 사용하면 외부에서 직접 접근할 수 없는 데이터를 만들 수 있다. 이를 통해 데이터 보호와 은닉을 구현할 수 있다.
- 한번만 실행되는 초기화 함수
Closure를 사용하여 함수가 한 번만 실행되도록 설정할 수 있다.
- 비동기 작업에서 데이터 유지하는
비동기 작업에서 Closure를 사용하면 데이터가 유지된다.
위 예제는 Closure가 데이터를 유지하며 실행된다. fetchData의 실행이 끝났음에도 url 변수를 setTimeout이 참조할 수 있다.
Closure 사용 시 주의점
-
메모리 누수 Closure는 참조를 유지하기 때문에, 불필요하게 Closure를 많이 사용하면 메모리 누수가 발생할 수 있다.
-
디버깅 어려움 Closure로 인해 코드의 실행 흐름을 추적하기 어렵게 되는 경우가 있다.
정리
Closure는 데이터 은닉, 상태 유지, 비동기 작업 등 다양한 상황에서 활용된다. 하지만 잘못 사용하면 성능 문제를 유발할 수 있으므로 필요할 때 적절히 사용하는 것이 중요하다.