본문 바로가기

컴퓨터공부/개발자 면접을 위한 CS

javascript 클로저 함수란?

by Life & study 2023. 5. 23.
반응형

javascript 클로저 함수란?

#javascriptclosures ##javascriptclosures #javascriptclosure #closuresjavascript #closurejavascript #javascriptclosurescope

#closures #closure #javascriptclosures #javascriptclosure #jsclosures #closurejavascript #closurejs #closuresjavascript #closuresinjavascript

function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12

 

이 코드는 클로저(Closure)를 사용하여 함수를 반환하는 코드입니다.
makeAdder(x) 함수는 x를 매개변수로 받습니다. 이 함수는 내부 함수를 반환하며, 반환된 함수는 x와 y를 합한 값을 반환합니다.
이렇게 반환된 함수는 add5와 add10 변수에 할당됩니다. makeAdder(5)를 호출하여 반환된 함수는 add5에 할당됩니다. 이후 add5(2)를 호출하면 내부함수에서 x값이 5이므로, 5와 2를 합한 결과 7이 반환됩니다. 마찬가지로 makeAdder(10)를 호출하여 반환된 함수는 add10에 할당되고, add10(2)를 호출하면 내부함수에서 x값이 10이므로, 10과 2를 합한 결과 12가 반환됩니다.
이렇게 클로저를 활용하면, 함수를 호출하기 전에 어떤 값을 미리 지정해 둘 수 있습니다. 이는 코드를 더 간결하고 유연하게 만들어 줍니다.

 

js 에서 클로져 기능을 사용하는이유,

 

클로저는 함수와 그 함수가 선언됐을 때의 렉시컬 환경(Lexical Environment)의 조합입니다. 이 조합으로 인해, 함수를 반환할 때 함수가 선언됐을 때의 스코프(변수나 함수 등에 접근할 수 있는 유효 범위)에 접근할 수 있습니다.
함수를 반환하면서 클로저를 활용하는 경우는 다음과 같습니다.

비슷한 기능을 하는 함수를 다수 선언할 때
클로저를 활용하면 함수를 호출할 때마다 매번 파라미터 값을 입력할 필요 없이, 반환된 함수에서 이전에 입력한 값을 활용하여 계산할 수 있습니다. 이는 유사한 기능을 하는 함수를 다수 선언할 때 유용합니다.

객체 지향 프로그래밍에서 private 변수와 메소드를 만들 때
클로저를 활용하면, 반환된 함수 내부에서 변수와 함수를 선언할 때 다음과 같이 함축적으로 private 변수와 메소드를 만들 수 있습니다.

function Person(name) {
  var _name = name; // private 변수

  this.getName = function() { // public 메소드
    return _name;
  }
}


클로저와 일반적인 함수 반환의 차이점은, 일반적인 함수 반환은 함수 내부에서 사용된 변수들은 반환한 이후 사라지는 반면, 클로저는 함수가 반환된 이후에도 함수 내부에서 사용된 변수와 스코프를 유지합니다.
이는 클로저를 활용하여 강력한 패턴을 만들 수 있게 되는데, 이러한 패턴이 대표적으로 모듈 패턴(Module Pattern)이 있습니다.

 

#javascriptclosures ##javascriptclosures #javascriptclosure #closuresjavascript #closurejavascript #javascriptclosurescope

#closures #closure #javascriptclosures #javascriptclosure #jsclosures #closurejavascript #closurejs #closuresjavascript #closuresinjavascript

반응형

댓글