← 질문 목록
#185깊이 0
클로저를 사용해 상태를 은닉하는 이유는 무엇인가?
외부 함수의 지역 변수를 외부에서 직접 수정하지 못하게 막아 데이터 무결성을 지키기 때문이다.
| 기준 | 전역 변수 | 클로저 은닉 |
|---|---|---|
| 접근성 | 누구나 가능 | 정의된 함수만 가능 |
| 상태 보호 | 불가능 | 캡슐화 가능 |
함수가 생성될 때 자신의 렉시컬 환경을 기억한다. 내부 함수로 변수에 접근하는 통로만 열어두면 외부에서는 변수 값을 바꿀 수 없다.
이는 객체 지향의 캡슐화와 유사한 효과를 낸다. 불필요한 전역 변수 사용을 줄여 이름 충돌을 방지하고 상태 변화를 예측 가능하게 만든다.
다만 클로저는 참조하는 변수를 계속 메모리에 유지한다. 클로저가 오래 살아 있으면 그것이 잡은 값도 같이 남는다. 다만 클로저에 닿을 길이 끊기면 함께 걷힌다. 새는 것이 아니라 붙잡고 있는 것이다.