본문 바로가기
junior developer :)/JS_JavaScript

[JS]즉시실행함수 iife(특징, 장/단점)

by ㅁ윤슬ㅁ 2023. 11. 14.
728x90
반응형

원티드 강의를 듣다가 처음 접하게 된 즉시 실행 함수 , IIFE(Immediately Invoked Function Expression)
IIFE는 즉시 실행되는 함수 표현식의 약자이다.

let fun = function() {
	console.log('실행 됨')
   };
   
fun();

이렇게 정의된 함수는 호출해주지 않으면 실행되지 않는 함수이다.
이와 다르게 즉시 실행함수는 아래와 같이 입력하면 바로 실행이 된다.

(function write() {
	console.log('즉시 실행')
    }());

보통 함수와의 차이점이라고 하면 함수 리터럴()로 감싼 형태라는 것이다.
소괄호로 감싸지 않는다면 함수 선언문으로 인지된다.

함수 리터럴은 function 키워드, 함수 이름, 함수 본문, 파라미터 리스트로 구성되어있다. 
위 함수 fun 과 같이 이름이 정의되어 있는 함수들과 달리 즉시 실행함수는 이 네가지의 요소 중 '함수 이름'이 누락되어 있다.

보통의 경우에는 함수 이름이 누락되어 있으면 에러가 발생하지만 함수를 할당받을 변수를 지정하거나 함수를 즉시 호출하는 경우에는 오류없이 정의할 수 있다.


즉시 실행함수는 전역 영역을 오염시키지 않기 위해서 사용된다. 
아래의 외부 스코프에서 직접 접근할 수 없다는 장점을 살려 적합하지 않은 곳에서 재 호출이 되는 '실수'를 방지하기 위해 사용된다.

즉시실행함수의 장점은 아래와 같다

1. 캡슐화 
외부 스코프에서 직접 접근할 수 없는 변수를 생성하여 정보 은닉과 캡술화를 제공한다

2. 즉시실행
함수가 선언되자마자 실행되므로 한번만 실행되는 초기화 코드를 간편하게 작성할 수 있다

3. 스코프 제한
외부 스코프에서 접근할 수 없어 변수 이름 충돌을 방지하고 코드 모듈화를 촉진하는데 도움이 된다.

 

하지만 함수의 내용을 디버깅 하기 전에 함수가 실행되어 버릴 수 있기 때문에 디버깅의 어려움이 있고, 가독성이 저하될 수 있다는 단점도 있다.

특히 ES6( let, const 키워드)의 등장으로 IIFE의 필요성은 줄었다고 한다.
하지만 캡슐화가 필요한 부분에서는 종종 유용하게 사용될 것 같다


참고

https://velog.io/@doondoony/javascript-iife

https://mine-it-record.tistory.com/339

728x90
반응형