더북(TheBook)

2.2.4 사례 연구: 경량급 의존성 주입 프레임워크 개발

지금까지는 의존성 주입을 하드 코딩했다. 엉망진창으로 짠 프로그램에 비하면 크나큰 발전이지만, 최선은 아니다. 전문가다운 의존성 주입 프레임워크는 이렇게 작동한다.

1 애플리케이션이 시작되자마자 각 인젝터블(injectable)4 명을 확인하고 해당 인젝터블이 지닌 의존성을 지칭하며 순서대로 DI 컨테이너에 등록한다.

2 객체가 필요하면 컨테이너에 요청한다.

3 컨테이너는 일단 요청받은 객체와 그 의존성을 모두 재귀적으로 인스턴스화한다. 그런 다음, 요건에 따라 필요한 객체에 각각 주입한다.

의존성 주입을 진하게 우려낸 앵귤러JS 같은 프레임워크 관점에서는 위와 같은 프로세스는 믿기 힘든 마술처럼 보일 것이다. 너무 마술 같아서 도저히 이해하기 힘들 수도 있다. 자, DI 컨테이너를 직접 만들면서 프레임워크의 작동 원리를 알아보자.

지금부터 작성할 예제는 테스트 주도 개발의 사례 연구 자료로도 활용 가치가 있다. 한 번에 하나씩 테스트에 응답하며 코드를 작성하다 보면 자바스크립트의 바른길로 들어서게 되리라.

컨테이너는 인젝터블과 의존성을 등록하고, 요청 시 객체를 내어주는 두 가지 일을 한다. register 함수부터 코딩해보자. 이 함수의 인자는 세 가지다.

인젝터블 명

의존성 명을 담은 배열

인젝터블 객체를 반환하는 함수. 인젝터블 인스턴스를 요청하면 컨테이너는 이 함수를 호출하여 반환값을 다시 그대로 반환한다. 또한, 컨테이너는 요청받은 객체의 의존성 인스턴스 역시 이 함수에 전달하는데, 곧 이어지는 테스트에서 다시 설명할 테니 잠시 보류하자.

 

4 역주 주입 가능한(injectable) 모든 의존성(dependency)을 집합적으로 일컫는 말입니다.

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