더북(TheBook)

3.3.2 의존성, 주입, 제어

다음 표는 앞 장에서 이미 다루었거나 앞으로 살펴볼 내용을 표로 정리한 것이다.

▼ 표 3-2 3장에서 사용하는 용어 정리

용어

설명

의존성(dependency)

테스트에서 제어할 수 없어 테스트 환경과 코드 유지 보수를 어렵게 만드는 요소를 의미한다. 시간, 파일 시스템, 네트워크, 난수 등이 이에 해당한다.

제어(control)

• 의존성의 동작 방식을 결정할 수 있는 능력을 의미한다. 의존성을 생성하는 주체가 그 의존성을 제어한다고 할 수 있으며, 이는 의존성을 코드에서 사용하기 전에 설정할 수 있는 능력이다.

• 예제 3-1에서 시간 값(currentDay)에 대한 제어권은 우리가 작성한 코드 내 있지 않았고, 시간 라이브러리(moment)가 갖고 있었다. 외부 의존성을 사용했기에 항상 현재 시간과 날짜를 사용해야 했고, 테스트도 일관성을 잃어버린 채로 외부 의존성에 따라 움직였다.

• 예제 3-3에서는 currentDay 매개변수로 의존성에 대한 제어역전시켜 접근할 수 있었다. 이제 테스트가 시간을 제어할 수 있으며, 하드코딩된 시간을 사용할 수 있다. 테스트 중인 모듈은 제공된 시간을 사용해야 하므로 테스트가 훨씬 쉬워졌다고 할 수 있다.

제어의 역전(inversion of control)

의존성을 내부에서 생성하지 않고 외부에서 주입받도록 코드 설계를 변경하는 것을 의미한다. 예제 3-3은 매개변수로 의존성을 주입받는 예시를 구현한 코드다.

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