소개
Dependency Injection (의존성 주입): 어떤 객체가 필요한 다른 객체를 직접 생성하는 대신, 외부로부터 제공받는 방식
- 필드 주입 or 생성자 주입
핵심: 객체 간의 의존성을 줄임
DI를 적용안하면, 결합도 증가(tight coupling)
장점
- 객체간 의존성 줄임
- 재사용성 증가
- 의존하는 객체의 구현을 쉽게 갈아끼울 수 있다.
- 서브 타입 등 다양한 구현을 수용할 수 있고, 때문에 다양한 곳에서 클래스를 재사용
- 테스트 편의성
- 의존성이 분리되어, 즉, Mocking 이 쉬워 진다 : Test Double 이 가능해졌다
Test Double
Test Double: 테스트를 진행할 때 실제 객체를 대신 사용하는 객체
- 마치 스턴트맨처럼, 테스트 코드에서 실제 객체를 대신하여 테스트를 안전하고 효율적 수행
- Mock: 미리 정의된 행동을 하는 가짜 객체입니다.
- 실제 객체와 동일한 인터페이스를 가지고 있지만, 실제 구현은 Mock 객체 자체에서 수행합니다.
- Stub: 특정 입력에 대해 미리 정의된 출력을 반환하는 가짜 객체입니다. Mock 객체와 유사하지만, Mock 객체보다 더 간단하고 제한적인 기능을 제공합니다.
- Dummy: 아무것도 하지 않는 가짜 객체입니다. 실제 객체와 인터페이스만 동일하며, 실제 구현은 전혀 없습니다.
- Spy: 실제 객체의 행동을 감시하고 기록하는 객체입니다. 테스트 코드에서 Spy 객체의 행동을 확인하여 테스트 결과를 검증할 수 있습니다.
- 효과
- 테스트 코드의 독립성 향상
- 테스트 코드의 안정성 향상
- 테스트 코드의 실행 속도 향상
IoC
- IoC(제어의 역전): 프로그램 제어권을 framework가 가져가는 것
- 개발자가 모든 제어의 중심이지만 코드 전체에 대한 제어는 framework가 한다.
- 개발자가 설정(xml, annotation 등)만 하면 Container가 알아서 처리한다.
- 즉, Framework 속에서 프로그래밍을 하는 것.
화이트박스 테스트(White Box Test)
화이트박스 테스트는 모듈의 원시 코드를 오픈시킨 상태에서 원시 코드의 논리적인 모든 경로를 테스트하여 테스트 케이스를 설계하는 방법이다.
- 화이트박스 테스트는 설계된 절차에 초점을 둔 구조적 테스트며, 테스트 과정의 초기에 적용된다.
- 모듈 안의 작동을 직접 관찰한다.
- 원시 코드(모듈)의 모든 문장을 한 번 이상 실행함으로써 수행된다.
- 프로그램의 제어 구조에 따라 선택, 반복 등의 분기점 부분들을 수행함으로써 논리적 경로를 제어한다.