미누에요
[JavaScript] 클로저(Closure) 본문
클로저(Closure)
Javascript에서 클로저(Closure)는 함수의 내부 범위에서 함수 외부 범위의 변수를 보호하는 데 사용되는 형태이다.
예를 들어 아래와 같은 함수가 있다고 하자.
let num = 5;
function minustwo() {
num -= 2;
}
minustwo();
console.log(num);
minustwo라는 함수는 2만큼의 값을 빼는 함수이다.
결과
5에서 2를 뺀 3이 정상적으로 나온 것을 확인할 수 있다.
하지만 위 코드에서는 num이라는 값에 다른 코드들로 언제든지 접근할 수 있다.
num이라는 변수가 현재 전역변수이기 때문이다.
let num = 5;
function minustwo() {
num -= 2;
}
num = 500;
minustwo();
console.log(num);
위처럼 num = 500이라는 코드가 자칫 생긴다면 결과값은 우리가 설계한 방향과는 완전히 다른 방향으로 흘러갈 가능성이 높다.
결과
그럼 num이라는 변수에 접근하는 것을 함부로 못하도록 만들면 되지 않을까 ?
이런 경우에도 우리는 클로저(Closure)를 사용할 수 있다.
사용하는 방법은, 우리가 만든 변수와 함수를 큰 함수 안으로 집어넣는 것이다.
function Closure() { // 함수로 감싸기
let num = 5;
function minustwo() { // 2를 빼는 메서드
num -= 2;
}
function printnum() { // 출력하는 메서드
console.log(num);
}
return { minustwo, printnum } // 꼭 return으로 반환해야함
}
let closure = Closure(); // closure이라는 객체에 반환된 값을 저장하여 사용
closure.printnum();
closure.minustwo();
closure.printnum();
함수로 감싸면서 자연스럽게 num이라는 변수는 함수 내에서만 유효한 변수가 된다.
그리고 나머지 기능들을 함수 내부의 메서드로 작성하였다.
결과
이렇게 클로저를 사용한다면 함수 밖에서는 num이라는 값을 사용할 수 없게 된다.
함수 밖에서 num을 사용할 수 없으므로 num의 값을 출력하려면 함수 내부에 num을 출력해주는 메서드를 생성하여 출력해야한다.
이렇듯 클로저(Closure)을 사용하면 변수를 은닉할 수 있게된다.
함수 밖에서는 num의 값에 접근할 수 없으므로 변수의 값을 보다 안전하게 관리할 수 있다는 장점이 있다.
또한, 전역변수를 사용하지 않음으로 데이터 관리에 유리한 코드가 된다는 장점이 존재한다.
이렇게 많은 장점을 가지고 있기 때문에 꼭 알아두어야 할 개념이라고 생각된다.
'JavaScript' 카테고리의 다른 글
[JavaScript] 값으로서의 함수 (0) | 2024.01.17 |
---|---|
[JavaScript] 유효 범위(Scope) (0) | 2024.01.16 |
[JavaScript] 유효범위(Scope), 지역변수와 전역변수 (0) | 2024.01.14 |
[JavaScript] 배열(Array) (0) | 2024.01.11 |
[JavaScript] 함수(Function) (0) | 2024.01.10 |