728x90
1. 의존하다
- 기능 구현을 위해 다른 구성 요소를 사용하는 것.
ex) 객체 생성, 메소드 호출, 데이터 사용 등 - 의존은 변경이 전파될 가능성이 있음을 의미
- 내가 의존하는 대상이 변경되면 나도 바뀔 가능성이 존재
== 의존하는 대상이 변경되면 의존받는 대상도 바뀔 가능성이 존재
- 내가 의존하는 대상이 변경되면 나도 바뀔 가능성이 존재
- ex) 호출하는 메소드의 파라미터 변경
- ex) 호출하는 메소드가 발생할 수 있는 exception 타입 추가 (예외 처리)
2. 순환 의존
- A->B->C->A의 형태로 의존하는 관계.
# 문제점
- 변경 연쇄 전파 가능성 존재.
=> 왠만하면 클래스, 패키지, 모듈 등의 모든 수준에서 순환의존이 없도록 구현하도록 하자.
Q. 의존하는 대상이 많다면?
- A,B,C,D,E,F를 의존하는 X가 존재한다고 할때
X는 의존하는 애들이 바뀔 때 마다 변경되어야 하는 것을 의미- 의존하는 대상은 적을수록 용이함
- 내가 바뀔 가능성이 줄어드는 것.
# situation 1 : 한 클래스에서 제공하는 기능이 많은 경우
- 각 기능마다 의존하는 대상이 다를 수 있음
- 한 기능 변경이 다른 기능에 영향을 줄 수 있음
=> A의 기능을 변경해야 하는데 B와 연결된 기능의 변경 발생
=> 한 기능만 테스트 하고 싶은데 다른 기능들 까지 초기화 해야 하는 상황이 발생
=> 테스트에 어려움 존재
# solution 1 : 기능 별로 분리 고려
- 개선 내용
- 각 클래스별로 의존이 줄어들게 됨
- 한 기능을 수정할 때 다른 기능을 수정하는 일이 생기지 않도록 됨
- 개별 기능 테스트 가능
# solution 2 : 몇 의존 대상을 단일 기능으로 묶어서 생각함으로써 의존 대상을 줄인다.
Q. 의존 대상 객체를 직접 생산하면?
=> 생성 클래스가 변경되면서 의존하는 코드또한 같이 변경됨.
그럼 어떻게 해?
- 의존 대상 객체를 직접 생성하지 않아야지
- ex) 팩토리, 빌더
의존 주입(Dependency Injection)
서비스 로케이터(Service Locator)
3. 의존 주입(Dependency Injection)
- 객체를 직접 생성하지 않고 초기화코드에서 생성자나 메소드를 이용하여 의존 객체를 주입한다.
# 조립기(Assembler)
- 조립기가 객체 생성, 의존 주입을 처리 ex) Spring frame work
# DI의 장점
- 의존 객체 변경이 쉬움
- 상위 타입 사용 시 의존대상이 변경될 경우 조립기(설정)만 변경하면 된다.
- 의존하는 객체 없이 대역 객체를 사용하여 테스트가 가능
- 대역 사용 시 원하는 상태로 초기화 가능 => 다양한 경우의 수를 테스팅하는 데에 훨씬 용이
728x90
'🦁 걸어봐 위엄 라잌어 라이옹 > 👀 주차별 과제' 카테고리의 다른 글
[대학교멋사🦁/OOD] 4. 기능과 책임 분리 (0) | 2023.05.05 |
---|---|
[대학교멋사🦁/OOD] 3. 상속 보다 조립 (0) | 2023.05.04 |
[대학교멋사🦁/OOD] 2. 다형성 추상화 (0) | 2023.05.04 |
[대학교멋사🦁/OOD] 1. 객체 | 캡슐화 (1) | 2023.05.04 |
[대학교멋사🦁/JAVA] Assignment_2회차_3 (1) | 2023.04.28 |