안녕하세요, 열정 가득한 주니어 개발자 여러분! 오늘은 JavaScript의 숨은 보석 같은 기능, 바로 '즉시실행함수(IIFE: Immediately Invoked Function Expression)'에 대해 알아보려고 합니다.
"잠깐만요, 또 하나의 복잡한 개념인가요?" 라고 생각하실 수 있겠지만, 걱정 마세요! 즉시실행함수는 여러분의 코드를 더 깔끔하고, 안전하고, 효율적으로 만들어주는 강력한 도구입니다. 이 글을 다 읽고 나면, 여러분은 "와, 이걸 왜 진작 몰랐을까!" 하고 감탄하실 거예요.
그럼 지금부터, 즉시실행함수의 세계로 빠져볼까요?
즉시실행함수(IIFE)는 정의되자마자 즉시 실행되는 JavaScript 함수입니다. 일반적인 함수는 정의한 후 나중에 호출해야 하지만, IIFE는 선언과 동시에 실행됩니다.
일반 함수를 사용한 IIFE의 기본 구조는 다음과 같습니다:
(function() {
// 함수 내용
})();
또는 이렇게 작성할 수도 있습니다:
(function() {
// 함수 내용
}());
화살표 함수를 사용한 IIFE의 기본 구조는 다음과 같습니다:
(() => {
// 함수 내용
})();
화살표 함수를 사용한 IIFE는 다양한 방식으로 작성될 수 있습니다:
기본 형태:
(() => {
// 함수 내용
})();
매개변수가 있는 경우:
((x, y) => {
console.log(x + y);
})(10, 20);
단일 표현식인 경우 (중괄호와 return 생략):
((x, y) => x + y)(10, 20);
비동기 IIFE (async/await 사용):
(async () => {
const result = await someAsyncFunction();
console.log(result);
})();
객체 리터럴을 즉시 반환하는 경우:
(() => ({
name: "IIFE",
value: 42
}))();
이러한 다양한 형태를 통해 화살표 함수 IIFE는 간결하고 유연한 코드 작성을 가능하게 합니다.
일반 함수와 화살표 함수의 가장 큰 차이점은 this 바인딩입니다.
const obj = {
name: "IIFE 예제",
regularIIFE: (function() {
console.log("일반 함수 IIFE의 this:", this);
return function() {
console.log("일반 함수 IIFE에서 반환된 함수의 this:", this);
};
})()
};
obj.regularIIFE();
const obj = {
name: "IIFE 예제",
arrowIIFE: (() => {
console.log("화살표 함수 IIFE의 this:", this);
return () => {
console.log("화살표 함수 IIFE에서 반환된 함수의 this:", this);
};
})()
};
obj.arrowIIFE();
실행 결과 비교:
this는 전역 객체(브라우저에서는 window)를 가리킵니다.this는 IIFE가 정의된 스코프의 this를 가리킵니다.arguments 객체의 사용 가능 여부도 중요한 차이점입니다.
(function() {
console.log("일반 함수 IIFE의 arguments:", arguments);
})(1, 2, 3);
(() => {
console.log("화살표 함수 IIFE의 arguments:", arguments);
// ReferenceError: arguments is not defined
})(1, 2, 3);
차이점:
arguments 객체를 사용할 수 있습니다.arguments 객체가 없습니다. 대신 rest 파라미터를 사용할 수 있습니다.IIFE를 생성자 함수로 사용하려는 경우에도 차이가 있습니다.
const Constructor = (function() {
function ConstructorFunc(name) {
this.name = name;
}
return ConstructorFunc;
})();
const instance = new Constructor("IIFE 예제");
console.log(instance.name); // "IIFE 예제"
const Constructor = (() => {
return (name) => {
this.name = name;
};
})();
try {
const instance = new Constructor("IIFE 예제");
} catch (error) {
console.error("에러 발생:", error);
// TypeError: Constructor is not a constructor
}
차이점:
즉시실행함수(IIFE)는 JavaScript에서 강력하고 유용한 패턴입니다. 이 글에서 우리는 IIFE의 기본 구조와 일반 함수, 화살표 함수로 작성된 IIFE의 주요 차이점을 살펴보았습니다.
this 바인딩의 차이arguments 객체 사용 가능 여부이러한 차이점을 이해하고 적절히 활용한다면, 더 효과적이고 안전한 코드를 작성할 수 있을 것입니다.
코딩의 세계는 끝이 없습니다. 계속해서 학습하고, 실험하고, 성장하세요. 여러분의 코딩 여정에 IIFE가 유용한 도구가 되기를 바랍니다!
해피 코딩!