본문 바로가기

Programming/Javascript

7. Javascript 함수 (5) - 즉시 실행 함수란

javascript logo

 

즉시 실행 함수의 사용법

즉시 실행 함수(immediate function)는 함수를 정의하는 동시에, 바로 실행하는 함수입니다. 함수를 정의(선언)한 다음 해당 함수에 필요한 인자 값을 통해 호출하는 절차를 거치지 않는다는 이야기죠. 우선은 이 즉시 실행 함수의 작성 방법을 살펴보도록 하겠습니다. 

 

(function (name) {            // 익명, 기명함수 모두 가능
    console.log(name);        // 선언문
})('John');                   // 인자 값의 전달

 

name 파라미터를 받아 출력하는 임의의 익명함수를 선언해 보았습니다. 그리고 즉시 실행 함수 형태로 선언 즉시 출력하였습니다. 자세히 살펴보면 함수 리터럴 양 옆에 또 하나의 괄호 '( )'가 추가되었습니다. 그리고 맨 마지막에는 일반적인 함수의 호출 때처럼 인자 값을 넣는 괄호를 추가하였습니다. 이런 형태로 함수를 정의한 다음 괄호로 감싸주고, 옆에 호출을 위한 괄호를 붙여주면 정의한 즉시 함수가 실행됩니다. 

 

참고로 위의 각주에 설명했듯이 익명함수 뿐만 아니라 기명 함수 역시 가능합니다. function과 (name) 사이에 함수 명칭을 넣어주더라도 동일하게 작동합니다. 

 

 


 

즉시 실행 함수의 사용 목적

즉시 실행 함수는 이렇게 한 번 정의하고 실행한 다음에는, 다시 호출할 수 없다는 특징을 갖고 있습니다. 왜 이런 함수를 사용하는 것일까요? 

 

우선, 어떤 js파일의 코드가 최초 실행 시 딱 한 번만 실행되고 이후로는 실행될 필요가 없는(실행하면 안되는)코드라면 이 즉시 실행 함수 형태로 작성해 실행하면 됩니다. 일종의 초기화 작업만을 위한 코드일 경우죠. 

 

그리고 위와 같이 '실행의 제한'이라는 성질과 더불어 함수 유효 범위와 관련된 목적도 있습니다. 기본적으로 Javascript는 변수 선언 시에는 전역 유효 범위를 갖게 됩니다. 하지만 함수 내부에 선언된 변수/파라미터는 함수 내부에서만 유효합니다. (참고로 var를 쓰지 않고 선언하면 함수 내부여도 전역 범위를 갖게 됩니다!) 

 

그렇기에, 즉시 실행 함수 내부에 선언된 변수들 역시 해당 함수 내부에서만 유효하다는 특성을 갖습니다. 반대로 전역 범위에서도 함수 내부에 접근할 수 없는 유효범위를 갖게 되죠. 

 

이런 특성을 이용해 jQuery같은 라이브러리에서 코드를 실행함수에 정의해두는 경우가 많습니다. 이렇게 즉시 실행 함수 내에 정의해 두게 되면, 네임스페이스가 깔끔하게 관리되고 다른 라이브러리들이 동시에 로드 되는 경우가 발생하더라도 충돌할 가능성이 없어집니다.