일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 컴퓨터과학
- es3
- 1일 1로그 100일 완성 IT지식
- 퀵정렬
- 프로세서 속도와 심장 박동수
- ES차이
- 공개API
- 한국디도스
- 빗썸데이터
- 아키네이처
- 알고리즘 문제 풀이
- 브라우저 작동원리
- 이진검색
- ECMA설명
- CS스터디
- 줌서비스
- es6
- es6문법
- 데이터분석
- 자바스크립트표준
- 주식스팸
- ES5
- 컴퓨터 논리와 구조
- 숫자구하기
- 트위터해킹
- 비전공자개발정리
- 아마존해킹
- HDD와 SSD의 차이
- API요청
- 네트워크해킹
- Today
- Total
개발일지
클로저란? 원리와 사용이유 본문
클로저란?
MDN에서는 클로저를 다음과 같이 정의하고 있다.
클로저는 독립적인 (자유) 변수를 가리키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 ‘기억한다’.
클로저는 주변의 상태 (lexical environment)의 참조와 함께 번들로 묶인 함수의 조합입니다. 즉, 클로져는 우리에게 inner함수에서 outer함수의 스코프에 접근을 가능하게 해줍니다. 자바스크립트에서 클로저는 함수가 생성될 때마다 생성됩니다.
간단히 말하자면 함수가 선언될 때(실행X) 외부의 lexcial environment를 참조?하게 되는 현상?이다.
결론적으로 오직 하나의 메소드를 가지고 있는 객체를 일반적으로 사용하는 모든 곳에 클로저를 사용할 수 있다.
함수 밖에서도 사용하기 위해서는 클로져를 사용하면 된다.
로저는 **자바스크립트의 고유한 개념이 아니라, 여러 함수형 프로그래밍 언어에서 공통적으로 발견되는 특성** 입니다. 그래서인지, 실제로 다양한 문헌과 여러 웹사이트에서 각기 다른 방식으로 클로저를 정의/설명하는 것을 살펴볼 수 있습니다. 때문에 ‘클로저’라는 개념을 학습하실 때, 순도? 100%의 정확한 정의를 찾아내려하기 보다는 현재 학습하고 계신 것과 같이 다양한 사례를 살피시고, 그것들을 토대로 이해하기 쉬운 나만의 정의를 내려보시는 것을 추천드립니다.
2. 클로저의 활용
클로저는 자신이 생성될 때의 환경(Lexical environment)을 기억해야 하므로 메모리 차원에서 손해를 볼 수 있다. 하지만 클로저는 자바스크립트의 강력한 기능으로 이를 적극적으로 사용해야 한다.
2.1 상태 유지
클로저가 가장 유용하게 사용되는 상황은 현재 상태를 기억하고 변경된 최신 상태를 유지하는 것이다. 아래 예제를 살펴보자.
2.2 전역 변수의 사용 억제
버튼이 클릭될 때마다 클릭한 횟수가 누적되어 화면에 표시되는 카운터를 만들어보자. 이 예제의 클릭된 횟수가 바로 유지해야할 상태이다.
2.3 정보의 은닉
이번에는 생성자 함수 Counter를 생성하고 이를 통해 counter 객체를 만들어보자.
2.4 자주 발생하는 실수
아래의 예제는 클로저를 사용할 때 자주 발생할 수 있는 실수에 관련한 예제다.
https://poiemaweb.com/js-closure
https://hyunseob.github.io/2016/08/30/javascript-closure/
https://developer.mozilla.org/ko/docs/Web/JavaScript/Closures
'면접준비' 카테고리의 다른 글
JS의 this란??? (0) | 2022.06.06 |
---|---|
GET과 POST의 차이 간단하게 설명해보자! (0) | 2022.06.03 |
CSS의 margin, paddilng, position 간단 설명 (0) | 2022.06.02 |
호이스팅이란??? 간단 요약 (0) | 2022.05.31 |
브라우저 렌더링 원리 (0) | 2022.05.30 |