자바스크립트 - 자기 자신을 호출하는 함수

안녕하세요, 야심 찬 프로그래머 여러분! 오늘 우리는 자바스크립트의 흥미로운 측면之一인 자기 자신을 호출하는 함수에 대해 배울 것입니다. 이 이름이 무서울 것 같지 않으신가요? 이 튜토리얼이 끝나면 프로처럼 사용할 수 있을 것입니다!

JavaScript - Self-Invoking Functions

자기 자신을 호출하는 함수

자기 자신을 호출하는 함수는 무엇인가요?

자기 자신을 호출하는 함수는 즉시 호출 함수 표현식(Immediately Invoked Function Expression, IIFE)으로도 알려져 있으며, 정의되자마자 실행되는 함수입니다. 마치 만들자마자 일을 시작하는 작은 로봇 같은 것입니다!

기본적인 예제를 보겠습니다:

(function() {
console.log("안녕하세요, 저는 자기 자신을 호출하는 함수입니다!");
})();

이 코드를 실행하면 콘솔에 "안녕하세요, 저는 자기 자신을 호출하는 함수입니다!"가 즉시 출력됩니다. 별도로 함수를 호출할 필요가 없습니다!

어떻게 작동하나요?

구조를 분해해 보겠습니다:

  1. 일반 함수로 시작합니다: function() { ... }
  2. 괄호로 감싸줍니다: (function() { ... })
  3. 끝에 또 다른 괄호를 추가합니다: (function() { ... })()

이 추가된 괄호는 자바스크립트에게 "이 함수를 지금 바로 실행하라!"는 신호를 줍니다.

다른 예제를 보겠습니다:

(function() {
let secretNumber = 42;
console.log("人生의 의미는 " + secretNumber + "입니다.");
})();

이를 실행하면 콘솔에 "人生의 의미는 42입니다."가 출력됩니다. 함수는 즉시 실행되어 人生의 비밀을 계산하고, 닌자처럼 사라집니다!

자기 자신을 호출하는 함수와 매개변수

자기 자신을 호출하는 함수는 매개변수를 받을 수도 있습니다. 마치 우리의 작은 로봇에게 일하기 전에 지시를 주는 것처럼입니다.

다음과 같이 보입니다:

(function(name) {
console.log("안녕하세요, " + name + "!");
})("알리스");

이를 실행하면 콘솔에 "안녕하세요, 알리스!"가 출력됩니다. 우리의 자기 자신을 호출하는 함수에 "알리스"를 인자로 전달하고 있습니다.

보다 복잡한 예제를 시도해 보겠습니다:

(function(a, b) {
let result = a + b;
console.log(a + " + " + b + " = " + result);
})(5, 7);

이를 실행하면 "5 + 7 = 12"가 출력됩니다. 함수는 두 매개변수를 받아서 더하고, 즉시 결과를 표시합니다.

자기 자신을 호출하는 함수의 私인 범위

자기 자신을 호출하는 함수의 슈퍼파워 중 하나는 私인 범위를 만들 수 있는 능력입니다. 마치 외부 세계로부터 변수를 안전하게 보관할 수 있는 비밀의 방이 있습니다.

다음 예제를 고려해 보겠습니다:

let result = (function() {
let secretNumber = 42;
return secretNumber * 2;
})();

console.log(result); // 출력: 84
console.log(secretNumber); // 오류 발생: secretNumber는 정의되지 않았습니다

여기서 secretNumber는 함수 내부에서만 접근할 수 있습니다. 외부 세계는 우리의 계산 결과만 볼 수 있고, 비밀 번호 자체는 볼 수 없습니다. 이는 전역 범위를 혼란스럽게 하지 않고 계산을 수행할 때 완벽합니다!

자기 자신을 호출하는 함수 사용의 이점

이제 여러분은 "왜 이 깜찍한 자기 자신을 호출하는 함수를 사용해야 할까요?"라는 의문이 있을 수 있습니다. 훌륭한 질문입니다! 몇 가지 이점을 탐구해 보겠습니다:

  1. 전역 변수 피하기: 자기 자신을 호출하는 함수는 전역 공간을 깨끗하게 유지하는 데 도움이 됩니다. 방을 정리하는 것처럼, 모든 것이 자리에 있도록 합니다!

  2. 모듈화: 코드에 모듈이나 네임스페이스를 만드는 데 훌륭합니다. 도구 상자의 별도의 상자처럼 생각하면 됩니다.

  3. 초기화: 스크립트가 로드될 때 초기 상태나 구성을 설정하는 데 적합합니다.

  4. 캡슐화: 私인 변수와 메서드를 만드는 방법을 제공합니다. 마치 只有 자신이 읽을 수 있는 비밀 일기처럼!

이 이점들을 실제로 보여드리겠습니다:

let myModule = (function() {
let privateVariable = "저는 私인입니다!";

function privateMethod() {
console.log(privateVariable);
}

return {
publicMethod: function() {
privateMethod();
}
};
})();

myModule.publicMethod(); // 출력: "저는 私인입니다!"
console.log(myModule.privateVariable); // 출력: undefined

이 예제에서 우리는 私인과 공개 부분을 가진 모듈을 만들었습니다. 외부 세계는 publicMethod에만 접근할 수 있고, privateVariable이나 privateMethod는 접근할 수 없습니다.

방법 표

여기서 다루었던 방법을 요약한 표를 제공합니다:

방법 설명 예제
기본 자기 자신을 호출하는 함수 정의되자마자 실행되는 함수 (function() { console.log("안녕하세요!"); })();
매개변수를 받는 자기 자신을 호출하는 함수 인자를 받는 자기 자신을 호출하는 함수 (function(name) { console.log("안녕하세요, " + name); })("알리스");
반환 값을 가지는 자기 자신을 호출하는 함수 반환 값을 가지는 자기 자신을 호출하는 함수 let result = (function() { return 42; })();
모듈 생성을 위한 자기 자신을 호출하는 함수 공개와 私인 부분을 가진 모듈을 만드는 함수 let module = (function() { return { publicMethod: function() {} }; })();

그렇게 하면, 여러분은 자바스크립트의 자기 자신을 호출하는 함수의 비밀 세계를 열어둔 것입니다. 이 도구를 지혜롭게 사용하십시오. 모든 상황에 적합한 것은 아니지만, 올바르게 사용하면 코드가 깨끗하고, 안전하며, 더 잘 정리됩니다.

계속 연습하고, 계속 코딩하십시오. 곧 여러분은 잠에서도 자기 자신을 호출하는 함수를 작성할 수 있을 것입니다(하지만 잠에서 코딩하는 것은 추천드리지 않습니다 - 이상한 버그를 일으키게 됩니다!). 행복하게 코딩하세요!

Credits: Image by storyset