클로저란?
클로저는 함수가 자신이 생성될 때의 환경을 "기억"하게 하는 자바스크립트의 특성입니다. 내부 함수가 외부 함수의 변수에 접근할 수 있도록 해주며, 외부 함수가 종료된 후에도 해당 변수를 사용할 수 있게 합니다.
클로저 사용 사례
다음 코드에는 클로저의 사용 예가 나타나 있습니다.
greeting
함수는 메시지를 인자로 받아, who
라는 내부 함수를 반환합니다. who
함수는 또 다른 인자 name
을 받고, greeting
함수의 인자와 함께 콘솔에 인사말을 출력합니다. 이때 who
함수는 greeting
함수의 스코프에 있는 msg
변수에 접근합니다.
var hello = greeting("안녕하세요!");
코드는 hello
라는 변수에 greeting
함수로부터 반환된 who
클로저를 저장합니다. 이 클로저는 msg
가 "안녕하세요!"
로 설정된 상태를 기억합니다.
hello("홍길동");
호출은 "홍길동님, 안녕하세요!"를 출력하고, hello("김철수");
호출은 "김철수님, 안녕하세요!"를 출력합니다. 여기서 hello
는 클로저로써 msg
에 저장된 값을 기억하고 있습니다.
var howdy = greeting("잘 지내시나요?");
코드는 howdy
라는 또 다른 클로저를 생성하고, 이 클로저는 msg
가 "잘 지내시나요?"
로 설정된 상태를 기억합니다.
howdy("홍길동");
호출은 "홍길동님, 잘 지내시나요?"를 출력합니다.
정리
이 코드는 클로저가 외부 함수의 지역변수(msg
)를 어떻게 "기억"하는지를 보여주는 좋은 예입니다. 각각의 클로저는 greeting
함수 호출 시에 전달된 다른 인사말을 기억하고 있습니다. 이는 클로저가 독립적인 상태를 유지할 수 있음을 보여줍니다.
'도서로 공부하는 프로그래밍 > 코딩 자율학습' 카테고리의 다른 글
[NodeJS] OK를 반환하는 간단 서버 만들기 (60) | 2024.04.26 |
---|---|
[JS] 클로저 사용 사례, 카운터 (60) | 2024.04.25 |
[JS] 스트링을 전개연산자(스프레드 연산자)로 배열 객체로 만드는 사례 (63) | 2024.04.23 |
[JS] ES6의 전개구문 ...으로 이터레이터를 소비 (50) | 2024.04.22 |
[JS] 이터러블(Iterable)과 이터레이터(Iterator) (52) | 2024.04.21 |