기록

7/11 기록 (클로저)

홍재 2022. 7. 11. 17:49

학습 목표

  • 클로저 함수의 정의와 특징에 대해서 이해할 수 있다.
  • 클로저가 갖는 스코프 범위를 이해할 수 있다.
  • 클로저를 이용해 유용하게 쓰이는 몇 가지 패턴을 이해할 수 있다.
 

첫 번째 특징은, 클로저 함수는 "함수를 리턴하는 함수" 라는 점입니다. 함수를 리턴하는 함수가 클로저의 형태를 만듭니다.

 

-  Q. 외부 함수는 y에 접근이 가능한가요? → no, 바깥 스코프에서는 안쪽 스코프로의 접근이 불가능합니다.

- Q. 내부 함수는 x에 접근이 가능한가요? → yes, 안쪽 스코프는 바깥 스코프에서 선언된 변수에 접근이 가능합니다.

 

이를 통해 알아볼 수 있는 클로저 함수의 두 번째 특징은 "내부 함수는 외부 함수에 선언된 변수에 접근 가능하다"라는 점입니다.

 

데이터를 보존하는 함수

 

= 스코프 규칙에 의하여 불가능

이것이 바로 정보의 접근 제한 (캡슐화) 입니다. 왜 이렇게 하는 것일까요? 만일 스코프로 value 값을 감싸지 않았더라면, value 값은 전역 변수여야만 했을 것입니다. 하지만 makeCounter라는 함수가 value 값을 보존하고 있기 때문에, 전역 변수로 따로 만들 필요가 없습니다. 전역 변수가 좋지 않은 이유는, 전역 변수는 다른 함수 혹은 로직 등에 의해 의도되지 않은 변경을 초래하기 때문입니다. 이를 side effect라고 합니다. side effect를 최소화하면, 의도되지 않은 변경을 줄일 수 있습니다. 따라서 이에 따른 오류로부터 보다 안전하게 값을 보호할 수 있습니다. 클로저를 통해 불필요한 전역 변수 사용을 줄이고, 스코프를 이용해 값을 보다 안전하게 다룰 수 있습니다.

 

makeCounter에 의해 리턴된 객체는, makeCounter를 실행할 때에 선언되는 value 값을 각자 독립적으로 가지게 됩니다. 따라서 counter1에서의 value와 counter2에서의 value는 서로에게 영향을 끼치지 않고, 각각의 값을 보존할 수 있습니다.

 

이와 같이 함수 재사용성을 극대화하여, 함수 하나를 완전히 독립적인 부품 형태로 분리하는 것을 모듈화라고 합니다. 클로저를 통해 데이터와 메서드를 같이 묶어서 다룰 수 있습니다. 즉, 클로저는 모듈화에 유리합니다.