Minwoo Dev.

[JavaScript] 클로저(Closure) 본문

JavaScript

[JavaScript] 클로저(Closure)

itisminu 2024. 1. 16. 22:13
728x90
반응형
SMALL

클로저(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의 값에 접근할 수 없으므로 변수의 값을 보다 안전하게 관리할 수 있다는 장점이 있다.

 

또한, 전역변수를 사용하지 않음으로 데이터 관리에 유리한 코드가 된다는 장점이 존재한다.

 

 

이렇게 많은 장점을 가지고 있기 때문에 꼭 알아두어야 할 개념이라고 생각된다.

 

728x90
반응형
LIST