클로저 질문 리스트
해당하는 질문들을 대답할 수 있도록, 본인이 공부한 흐름에 맞게 정리하여 올려주세요.
클로저란 무엇인가요?
클로저를 사용하는 이유는 무엇인가요?
클로저의 대표 활용 패턴은 무엇이 있나요?
인수 클로저
1. 클로저의 의미
2. 클로저 작동 원리
3. 클로저 활용 패턴
3.1 콜백함수 내부에서 외부 데이터를 사용하고자 할 때
3.2 접근 권한 제어 (정보은닉)
- private 변수와 public 변수를 함수 차원에서 구분
3.3 부분 적용 함수
n 개의 인자를 받는 함수에 미리 m개의 인자만 넘겨 변수로 기억해두었다가 필요시에 (n-m)개의 나머지 인자를 넘겨서 비로소 원래 함수를 실행하도록 하는 것
- bind 메소드를 사용하는 것 자체가 부분 적용 함수
- 실무에서의 debounce 사례
3.4 커링
여러개의 인자를 받는 함수를 하나의 인자만 받는 함수로 나누어서 순차적으로 호출될 수 있는 체인 형태로 함수를 구성한 것
- 부분 적용 함수와 다른 점
- 커링함수는 한 번에 하나의 인자를 전달하는 것이 원칙
- 커링 함수의 중간 과정은 인자를 받기 위해 대기하는 것이고, 실제 원본함수는 모든 인자를 받는 마지막에 1번 실행된다.
- 화살표함수로 가독성을 증가시켜 활용할 수 있다.
- 마지막 인자가 넘어갈 때까지 함수 실행을 미루기 때문에, 지연실행(원하는 시점까지 지연시켰다가 실행 가능하다는 점)을 활용할 수 있다.
- 사례
- HTTP요청 시 baseUrl, path, id 를 각각 받는 커링 함수 구현
- 라이브러리, 프레임워크 등에서 광범위하게 사용
- redux 미들웨어?
수경 클로저
클로저
클로저는 함수의 렉시컬 스코프를 기억하여 함수가 렉시컬 스코프를 벗어난 외부 스코프에서 실행될 때에도 자신의 렉시컬 스코프에 접근할 수 있게 해주는 것이다.
함수를 선언할 때 만들어지는 유효범위가 사라진 후에도 호출할 수 있는 함수
이미 생명 주기 상 끝난 외부 함수의 변수를 참조하는 함수
자신이 생성될 때의 스코프에서 알 수 있었던 변수들 중 언젠가 자신이 실행될 때 사용할 변수들만을 기억하여 유지시키는 함수
클로저는 선언할 주변환경을 포섭하여서, 그 기억을 계속 가지고 있는다. -by 고준혁
- 클로저가 가능한게, 가비지컬렉터 ㅇ
[클로저는 왜 사용할까?]
클로저로 정보 은닉과 캡슐화를 제공할 수 있다.
a = (function () { var privatefunction = function () { alert('hello'); } return { publicfunction : function () { privatefunction(); } } })();
a 내부의
publicfunction
함수는 privatefunction
함수를 호출한다. 여기서 publicfunction
에는 privatefunction
이 없지만 클로저에서 접근할 수 있기 때문에 호출할 수 있습니다. privatefunction
을 직접 호출할 수 없고 공개 된 publicfunction
을 통해 호출할 수 있다는 것입니다.클로저 예시
var updateClickCount=(function(){ var counter=0; return function(){ ++counter; } })(); // 즉시 호출
updateClickCount는 선언과 동시에 딱 한번 실행된다. 리턴되는 익명의 함수는 클로저를 통해 counter의 값에 접근할 수 있다. 클로저를 통해 리턴되는 함수가 private 변수 counter를 가지도록 해주는 셈이다.
창민 클로저
클로저란 무엇이고 클로저 패턴을 사용하는 이유는 무엇인가요
답변
상위 스코프의 식별자를 참조하고 있고 외부 함수보다 더 오래 유지되는 중첩 함수이다
상태를 안전하게 변경하고 유지하기 위해 사용한다