더북(TheBook)

3.3.2 즉시 실행 모듈 생성

API를 반환하는 건 임의 모듈과 같지만, 외부 함수를 선언하자마자 실행하는 방법이다. 반환된 API는 이름공간을 가진 전역 변수에 할당된 후 해당 모듈의 싱글톤 인스턴스가 된다. 예제 3-1을 이런 식으로 고치면 예제 3-2처럼 된다.

예제 3-2 싱글톤 모듈

var MyApp = MyApp | | {};
  
MyApp.WildlifePreserveSimulator = (function() {
var animals = [];
  
return {
  addAnimal: function(animalMaker,species, sex) {
    animals.push(animalMaker.make(species,sex));
  },
  getAnimalCount: function() {
    return animals.length;
  }
};
}()); // <–즉시 실행한다!

싱글톤은 이렇게 사용한다.


MyApp.WildlifePreserveSimulator.addAnimal(realAnimalMaker, gorilla, female);

외부 함수는 애플리케이션 기동 코드의 실행과 상관없이 코드가 작성된 지점에서 즉시 실행된다. 따라서 함수 (즉시) 실행 시 의존성을 가져오지 못하면 외부 함수에 주입할 수 없다. 이런 점은 다소 불편하다. 싱글톤이 꼭 필요하다면 임의 모듈 패턴으로 모듈을 코딩하고 해당 모듈을 요청할 때마다 의존성 주입 프레임워크에서 같은 인스턴스를 제공하는 편이 의존성 주입 측면에서 더 낫다. 앵귤러JS가 ‘서비스’ 싱글톤을 내어주는 방식도 이와 같다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.