더북(TheBook)

IoC 컨테이너와 의존성 주입

PasswordVerifierTimeProvider를 결합하는 방법에는 여러 가지가 있다. 예제에서는 코드를 단순하게 만들고자 의존성을 수동으로 주입했다. 요즘은 대부분의 프레임워크가 테스트 대상 객체에 의존성을 주입할 수 있는 기능을 제공하므로 객체가 어떻게 생성될지 결정할 수 있다. 앵귤러가 그중 하나다.

자바의 스프링이나 C#의 Autofac 또는 StructureMap 같은 라이브러리를 사용하면 생성자 주입으로 객체를 쉽게 구성할 수 있다. 이를 위해 별다른 함수를 만들 필요도 없다. 일반적으로 이러한 기능을 제공하는 것을 제어의 역전(Inversion of Control, IoC) 컨테이너 또는 의존성 주입(Dependency Injection, DI) 컨테이너라고 한다. 테스트를 소개하는 데 불필요한 내용을 모두 다룰 필요는 없기에 이 책에서는 이 정도만 소개하고 넘어간다. 좋은 테스트를 만드는 데 반드시 필요한 내용은 아니기 때문이다.

사실 필자는 테스트를 만들 때 보통 IoC 컨테이너를 사용하지 않는 편이다. 대부분의 경우 커스텀 팩토리 함수를 만들어 의존성을 주입하는 방식으로 전개한다. 이렇게 하면 테스트를 더 읽기 쉽고 이해하기 쉽게 만들 수 있다.

설령 앵귤러를 이용하여 테스트를 만들더라도 메모리상의 객체에 의존성을 주입하기 위해 의존성 주입 프레임워크를 사용할 필요가 없다. 객체의 생성자를 직접 호출하고 가짜 데이터를 주입하는 방식으로 풀어 나갈 수 있기 때문이다. 이를 팩토리 함수에서 처리하면 유지 보수성을 해치지 않으면서 동시에 테스트에 불필요한 추가 코드를 작성하지 않아도 된다.

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