[TIL] 2020/08/23

yongkini ·2020년 8월 23일
0

Today I Learned

목록 보기
15/173
post-thumbnail

Today, I Learned


  • 클로저란 간략하게 말해서 자유 변수(free variable)를 참조하는 함수이다. 이 때, 자유 변수란 이미 콜 스택에서 실행되고 사라진 실행 컨텍스트의 활성 객체에 있던 변수를 의미한다. 본래, 이미 실행된 실행 컨텍스트의 활성 객체는 실행 이후 자바스크립트의 가비지 컬렉터(Garbage Collector)에 의해서 사라지게 되는데, 해당 함수 내에 또 다른 함수(주로 리턴되는 함수)가 [[scopes]] 프로퍼티로 해당 함수의 활성 객체를 참조하고 있는 경우에는 사라지지 않고, 메모리에 그대로 남아있게 되고, 이에 따라, 이러한 자유 변수를 참조할 수 있게 된다. closure는 자유 변수와 엮이어져 있는 함수라고 생각하면 될 것 같다.
  • 클로저를 이용하는 대표적인 사례가 커리 함수이다. 상위 함수에 접근할 수 있는 클로저의 특성에 따라 변수를 분할해서 받되, 이전의 변수들은 상위 함수에서 받아서 변경 불가능한 채로 받는 형태의 함수라고 생각하자.
  • 그러나, 이러한 클로저에도 단점이 있는데, 아까 말했듯이, 클로저는 이미 실행된 컨텍스트의 활성 객체를 가비지 컬렉터로 삭제하지 않고, 참조해서 쓰는 것이기 때문에, 해당 객체가 계속해서 메모리 상에 남아있게 되어 메모리 낭비가 일어난다. 또한, 스코프 체인에서 이전의 활성 객체를 참조하게 되면 성능 저하가 일어난다는 점이다. 그러나, 자바스크립트에서 제공하는 하나의 기능인 클로저는 이러한 단점에도 효율적으로 쓰일 수 있는 부분이 있기 때문에 잘 활용할 줄 알아야한다.

Planning to Study

  • this 심화학습
  • call, apply, bind 복습
  • 객체 지향 프로그래밍, 고차함수 + underbar 복습
profile
완벽함 보다는 최선의 결과를 위해 끊임없이 노력하는 개발자

0개의 댓글