IIFE(즉시 호출 함수 표현식)는 주로 JavaScript에서 사용되는 패턴이며 다음과 같은 여러 용도로 사용됩니다.
- 캡슐화 및 로컬 범위: IIFE는 변수와 함수에 대한 새로운 범위를 생성하여 함수 내에 캡슐화합니다. 이는 전역 네임스페이스의 오염을 방지하고 스크립트와 라이브러리 간의 변수 이름 충돌을 방지하는 데 도움이 됩니다.
- 프라이버시: IIFE 내부에 정의된 변수나 함수는 외부에서 접근할 수 없으므로 프라이버시를 제공합니다. 이는 JavaScript 모듈에서 개인 변수나 함수를 생성하는 데 유용합니다.
- 즉시 실행: IIFE는 정의되는 즉시 실행됩니다. 이는 이벤트나 전체 스크립트가 로드될 때까지 기다리지 않고 즉시 실행해야 하는 코드를 초기화하는 데 유용합니다.
- 전역 변수 관리: 전역 변수(예: 브라우저 환경의 'window')를 IIFE에 매개변수로 전달하면 편의를 위해 별칭을 지정할 수 있고 잠재적으로 범위 조회 시간을 줄일 수 있습니다.
this의 안전한 사용: IIFE에서 this는 브라우저의 window 객체와 같이 IIFE가 호출되는 컨텍스트에 바인딩되므로 안전하게 사용할 수 있습니다.
- 모듈 패턴: ES6 모듈이 도입되기 전에 IIFE는 JavaScript의 모듈을 모방하는 데 사용되었습니다. 공개되어야 하는 함수와 변수는 IIFE 끝에 반환되어 공개 API를 생성합니다.
예시
(function() {
var privateVar = "I am private";
console.log(privateVar);
})();
이 경우 privateVar는 IIFE 외부에서 접근할 수 없으므로 비공개로 유지됩니다.
최신 JavaScript의 경우
ES6 모듈과 블록 범위 변수(let 및 const)의 출현으로 현대 JavaScript 개발에서 IIFE의 필요성이 크게 감소했습니다. 모듈은 본질적으로 범위와 개인정보 보호를 제공하므로 이전 JavaScript 코드베이스에 비해 패턴이 덜 중요해집니다.