의존
- 기능 구현을 위해 다른 구성 요소를 사용하는 것
- 의존의 예: 객체 생성, 메서드 호출, 데이터 사용
- 의존은 변경이 전파될 가능성을 의미
- 의존하는 대상이 바뀌면 바뀔 가능성이 높아짐
- 예: 호출하는 메서드의 파라미터가 변경
- 예: 호출하는 메서드가 발생할 수 있는 익셉션 타입이 추가
순환 의존
- 순환 의존 -> 변경 연쇄 전파 가능성
- 클래스, 패키지, 모듈 등 모든 수준에서 순환 의존 없도록
의존하는 대상이 많으면?
의존하는 대상은 적을수록 좋다 (내가 바뀔 가능성이 줄어듬)
의존 대상이 많을 때 1, 기능이 많은 경우
- 한 클래스에서 많은 기능을 제공하는 경우
- 각 기능마다 의존하는 대상이 다를 수 있음
- 한 기능 변경이 다른 기능에 영향을 줄 수 있음
기능 별로 분리를 고려
묶어보기 ( 여러 의존 대상을 단일 기능으로 묶어볼 수 있는지 생각해보기
의존 대상 객체를 직접 생성하면?
- 생성 클래스가 바뀌면 의존하는 코드도 바뀜
- 의존 대상 객체를 직접 생성하지 않는 방법
- 팩토리, 빌더
- 의존 주입(Dependency Injection)
- 서비스 로케이터(Service Locator)
의존 주입(Dependency Injection)
- 외부에서 의존 객체를 주입
- 생성자나 메서드를 이용해서 주입 (생성자와 메서드를 이용해서 객체를 전달하는 것은 초기화 코드에서 진행함. 프로그램을 초기화하는 코드에서 알맞은 객체를 생성하고 전달함)
보통은 조립기를 이용해서 의존 객체를 생성하고 주입함
- 조립기(Assembler)
-의존 대상이 바뀌면 조립기(설정)만 변경하면 됨(?)
- 의존하는 객체의 실제 구현이 없어도 대역 객체를 사용해서 테스트 가능