JavaScript
자바스크립트 개발자가 알아야할 33가지 #8 IIFE마스터하기
Ghost.
2022. 10. 19. 22:41
IIFE
즉시 실행 함수 표현(IIFE, Immediately invoked Function Expression)**은 정의되자마자 즉시 실행되는 Javascript Function을 말한다.
(function () {
statements
})();
- Self-Executing Anonymous Function으로 알려진 디자인 패턴이다
- 크게 두 부분으로 구성된다.
- (() Grouping Operator)로 둘러싸인 익명함수(Anonymous Function)이다.
- 전역 스코프에 불필요한 변수를 추가해서 오염시키는것을 방지
- private변수처럼 사용할 수 있는 효과
- 즉시 실행 함수를 생성하는 괄호 ()이다.
- (() Grouping Operator)로 둘러싸인 익명함수(Anonymous Function)이다.
아래 함수는 즉시 실행되는 함수 표현이다. 표현 내부의 외부로부터의 접근이 불가능하다.
(function () {
let aName = "Barry";
})();
// IIFE 내부에서 정의된 변수는 외부 범위에서 접근이 불가능하다.
aName // throws "Uncaught ReferenceError: aName is not defined"
IFEE를 변수에 할당하면 IIFE 자체는 저장되지 않고 함수가 실행된 결과만 저장된다.
let result = (function () {
let name = "Barry";
return name;
})();
// 즉시 결과를 생성한다.
result; // "Barry"
IIFE는 값을 리턴할 수 있을 뿐만 아니라, 호출될 때, 인자를 받을 수도 있다. l
(function (name,age) {
return console.log(name,age)
}("Barry",25));
- 위의 예제의 첫 번째 줄에서 , IFEE는 name, age각각 두 개의 파라미터를 갖는다.
- 우리가 5번째 줄에서 IIFE를 실행할 때, 여태까지 사용했던 빈 괄호 () 대신에 인자 (aguments)를 IIFE로 넘겼다.
- 2번째 3번째 줄은 이 파라미터를 IIFE내부에서 사용한다.
싱글톤 패턴
싱글톤(singleton) 패턴은 전체 시스템에서 하나의 인스턴스만 존재하도록 보장하는 객체 생성 패턴을 말한다. 객체 리터럴도 싱글톤 패턴이라고 할 수 있다.
let singletonObj = {
a : '값',
b : function () {
}
}
/* Singleton */
/* 싱글톤은 단하나의 인스턴스만 가진다.
*/
let mySingleton = (function () {
// 인스턴스는 Singleton에 대한 참조를 저장합니다.
let instance;
function init() {
// 싱글톤
// 프라이빗 메소드와 변수
function privateMethod(){
console.log( "I am private" );
}
let privateletiable = "Im also private";
let privateRandomNumber = Math.random();
return {
// 퍼블릭메소드와 변수
publicMethod: function () {
console.log( "The public can see me!" );
},
publicProperty: "I am also public",
getRandomNumber: function() {
return privateRandomNumber;
}
};
};
// 싱글턴 인스턴스(있는 경우)를 가져옵니다(존재하는 경우).
// 렉시컬 특성으로 인해 비공개 변수, 메서드에 접근 가능하다 (클로저)
return {
getInstance: function () {
if ( !instance ) {
instance = init();
}
return instance;
}
};
})();
let singleA = mySingleton.getInstance();
let singleB = mySingleton.getInstance();
singleA.publicMethod(); // The public can see me!
console.log(singleA.publicProperty);//I am also public
console.log(singleA.getRandomNumber());//0.8015655605828005
console.log(singleB.getRandomNumber());//0.8015655605828005
console.log(singleA === singleB) //true
- 예제 코드에서 비공개 함수 init()의 return 값으로 반환하는 객체가 싱글톤이다.
- 내부 변수에 접근하여 객체를 반환하는 클로저 패턴을 사용했다.
- 객체를 여러 번 생성하더라도 한 개의 객체를 참조하게 된다.
- singleA와 singleB 두 개의 인스턴스를 생성했지만 getRandomNumber의 반환 값이 같은 값이다. (singleB = singleA에 객체를 가지게 된다 )
- 이러한 싱글톤 패턴을 이용하면 불필요한 메모리 낭비를 줄일 수 있다.
Reference
https://velog.io/@jakeseo_me/자바스크립트-개발자라면-알아야-할-33가지-개념-8-자바스크립트-필수요소-IIFE-마스터하기
자바스크립트 개발자라면 알아야 할 33가지 개념 #8 자바스크립트 필수요소 : IIFE 마스터하기
들어가기 전에 이 포스팅은 https://medium.com/@vvkchandra/essential-javascript-mastering-immediately-invoked-function-expressions-67791338ddc6 에 있는 포스팅들을 번역한 것입니다. 오역이나 의역이 있을 수 있습니다. 지
velog.io