상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
ANZ 은행의 기업 고객을 위한 특별 혜택은 무엇인가요?
발리에서의 가족 여행을 위한 추천 장소는 어디인가요?
발리에서의 자원봉사 프로그램은 어떻게 참여하나요?
발리의 주요 관광지에서의 접근성은 어떤가요?
지구의 표면적은 얼마인가요?
지구의 대기 중 이산화탄소 농도가 증가하는 이유는 무엇인가요?
동남아시아에서의 자원봉사 활동은 어떻게 참여하나요?
수면의 사이클은 얼마나 자주 반복되나요?
수면 중 발생하는 신체 변화는 무엇인가요?
피로를 줄이기 위한 자연 요법은?
업비트에서 추천인 프로그램은 어떻게 운영되나요?
파킨슨병의 증상 완화를 위한 대체 요법은 무엇인가요?
Previous
Next
수정하기 - 자바스크립트에서 클로저(Closure)란 무엇인가요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
클로저(Closure)는 <a href='https://sangseek.com/sangseeks/자바/ko'>자바</a>스크립트에서 중요한 개념 중 하나로, <a href='https://sangseek.com/sangseeks/함수/ko'>함수</a>와 그 함수가 선언될 때의 스코프(유효 범위)를 기억하는 기능을 의미합니다. 클로저는 주로 함수가 다른 함수 안에서 정의될 때 발생하며, 이로 인해 <a href='https://sangseek.com/sangseeks/내부 함수/ko'>내부 함수</a>는 외부 함수의 변수에 접근할 수 있습니다. 클로저는 자바스크립트의 함수형 프로그래밍 패러다임과 비동기 프로그래밍에서 매우 유용하게 사용됩니다. 클로저의 기본 개념클로저는 다음과 같은 두 가지 요소로 구성됩니다:1. 함수 : 클로저는 항상 함수와 관련이 있습니다. 클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있도록 해줍니다. 2. 스코프 : 클로저는 함수가 선언될 때의 스코프를 기억합니다. 이 스코프는 함수가 호출될 때의 스코프와는 다를 수 있습니다. 클로저의 동작 원리클로저가 어떻게 작동하는지 이해하기 위해 간단한 예제를 살펴보겠습니다.```javascriptfunction outerFunction() { let outerVariable = 'I am from outer function'; function innerFunction() { console.log(outerVariable); } return innerFunction;}const closureFunction = outerFunction();closureFunction(); // 'I am from outer function' 출력```위의 코드에서 `outerFunction`은 `innerFunction`을 반환합니다. `innerFunction`은 `outerVariable`에 접근할 수 있으며, 이는 `outerFunction`이 호출된 후에도 여전히 유효합니다. 이처럼 `innerFunction`은 `outerFunction`의 스코프를 기억하고 있기 때문에 클로저가 형성됩니다. 클로저의 활용클로저는 다양한 상황에서 유용하게 사용됩니다:1. 데이터 은닉 : 클로저를 사용하여 외부에서 접근할 수 없는 변수를 만들 수 있습니다. 이를 통해 데이터 은닉을 구현할 수 있습니다. ```javascript function createCounter() { let count = 0; return { increment: function() { count++; return count; }, decrement: function() { count--; return count; }, getCount: function() { return count; } }; } const counter = createCounter(); console.log(counter.increment()); // 1 console.log(counter.increment()); // 2 console.log(counter.getCount()); // 2 console.log(counter.decrement()); // 1 ```2. 비동기 프로그래밍 : 클로저는 비동기 코드에서 변수의 상태를 유지하는 데 유용합니다. 예를 들어, `setTimeout`과 같은 비동기 함수에서 클로저를 사용하여 특정 변수의 값을 유지할 수 있습니다. ```javascript function createTimers() { for (var i = 0; i < 3; i++) { setTimeout(function() { console.log(i); // 3이 3번 출력됨 }, 1000); } } createTimers(); ``` 위의 코드에서는 `i`가 비동기적으로 증가하기 때문에, 모든 `setTimeout`에서 `i`의 최종 값인 3이 출력됩니다. 이를 해결하기 위해 클로저를 사용할 수 있습니다. ```javascript function createTimers() { for (let i = 0; i < 3; i++) { setTimeout(function() { console.log(i); // 0, 1, 2가 각각 출력됨 }, 1000); } } createTimers(); ``` 여기서 `let` 키워드를 사용하여 `i`를 블록 스코프 변수로 만들면, 각 루프의 `i` 값이 클로저에 의해 유지됩니다. 클로저의 단점클로저는 매우 유용하지만, 몇 가지 단점도 있습니다:1. 메모리 누수 : 클로저가 외부 함수의 변수를 참조하고 있을 경우, 해당 변수가 가비지 컬렉션의 대상이 되지 않아 메모리 누수가 발생할 수 있습니다.2. 디버깅의 어려움 : 클로저를 사용하면 코드의 흐름이 복잡해질 수 있어 디버깅이 어려워질 수 있습니다. 결론클로저는 자바스크립트에서 매우 강력한 기능으로, 데이터 은닉, 비동기 프로그래밍, 함수형 프로그래밍 등 다양한 상황에서 활용됩니다. 클로저의 개념을 이해하고 적절히 활용하면, 더 나은 코드 구조와 유지보수성을 갖춘 프로그램을 작성할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기