JavaScript에서 스코프와 클로저는 매우 중요한 개념입니다. 스코프는 변수와 함수가 어디서 어디까지 접근 가능한지를 정의하는 범위입니다. 클로저는 함수가 정의될 때의 렉시컬 환경을 기억하여, 함수가 스코프 밖에서 호출되어도 해당 환경에 접근할 수 있게 하는 기능입니다.
스코프 (Scope)
JavaScript의 주요 스코프 유형은 다음과 같습니다:
1. 전역 스코프 (Global Scope): 코드의 모든 부분에서 접근 가능한 변수나 함수.
2. 함수 스코프 (Function Scope): 함수 내부에서 선언된 변수나 함수는 함수 외부에서 접근할 수 없습니다.
3. 블록 스코프 (Block Scope): let과 const로 선언된 변수는 그들이 선언된 블록(일반적으로 {} 내부) 내에서만 접근 가능합니다.
var x = 10; // 전역 변수
function myFunction() {
var y = 20; // 함수 스코프 변수
console.log(x); // 전역 변수 x는 함수 내에서 접근 가능
console.log(y); // 지역 변수 y는 함수 내에서 접근 가능
}
myFunction();
console.log(x); // 전역 변수 x는 여전히 접근 가능
// console.log(y); // 오류: y는 myFunction의 지역 변수로서 함수 외부에서는 접근 불가능
클로저 (Closure)
클로저는 함수가 생성될 때 그 함수가 선언된 렉시컬 환경을 “기억”하는 특성을 말합니다. 이는 함수가 스코프 외부에서 실행될 때도 그 환경에 있는 변수에 접근할 수 있게 합니다.
function makeCounter() {
var count = 0; // `count`는 `makeCounter` 함수의 지역 변수
return function() {
return count++; // 내부 함수가 외부 함수의 변수 `count`를 참조
};
}
var counter = makeCounter(); // `counter`는 이제 클로저
console.log(counter()); // 0
console.log(counter()); // 1
console.log(counter()); // 2
// 각각의 `counter` 인스턴스는 독립적인 `count` 변수의 참조를 가집니다.
var anotherCounter = makeCounter();
console.log(anotherCounter()); // 0
console.log(anotherCounter()); // 1
이 클로저 예시에서, makeCounter 함수는 내부 함수를 반환하고, 이 내부 함수는 부모 함수의 count 변수를 참조합니다. 이 내부 함수는 makeCounter 함수의 스코프 밖에서 호출되더라도, count 변수에 대한 참조를 유지합니다. 이것이 클로저의 핵심적인 특성입니다.
클로저의 사용 사례
클로저는 데이터 캡슐화, 이벤트 핸들러, 콜백 함수, 모듈 패턴 등 다양한 상황에서 유용하게 사용됩니다. 예를 들어, 개인 정보를 외부로부터 보호하면서 접근을 제어하려는 경우 클로저를 활용할 수 있습니다.
이러한 스코프와 클로저의 개념은 JavaScript를 깊이 이해하고 효과적으로 사용하는 데 있어 필수적입니다.
'IT 노트 > JavaScript' 카테고리의 다른 글
[JavaScript] 비동기 프로그래밍: 콜백, 프로미스, async/await (0) | 2024.07.11 |
---|---|
[JavaScript] 프로토타입과 상속: 객체 지향 프로그래밍 개념, 프로토타입 체인, 상속 방법 (0) | 2024.07.10 |
[JavaScript] this 키워드: 함수 호출 맥락에 따른 this의 의미 (0) | 2024.07.09 |
[JS정규표현식] URL에서 화일명을 취득하는 정규표현식 (0) | 2021.09.22 |
[JS라이브러리] dayjs를 이용하여 자주 사용하는 날짜 변환클래스 작성하기 (0) | 2021.09.22 |