오브젝트(조영호 저)를 읽고 작성한 글입니다.
협력은 필수적이지만 과도한 협력은 설계를 곤경에 빠뜨릴 수 있다.
OOP의 핵심은 협력을 위해 필요한 의존성을 유지하면서도 변경을 방해하는 의존성은 제거하는 것에 있다.
의존성 전이
의존성은 전이될 수 있다.
PeriodCondition이 Screening에 의존한다는 것은 Screening의 의존 대상에 대해서도 자동으로 의존하게 된다는 것이다.
의존성이 실제로 전이될지 여부는 변경의 방향과 캡슐화의 정도에 따라 달라진다.
의존성 해결
컴파일타임 의존성(추상화)은 런타임 의존성(구현체)으로 대체되어야 한다.
이를 의존성 해결이라고 부른다.
의존성 해결에는 3가지 방법이 있다.
- 생성자
- 수정자
- 메서드 실행시 인자를 통해
의존성과 결합도
- 의존성 = 두 요소 사이의 관계 유무
- 결합도 = 의존성의 정도. 한 요소가 자신이 의존하는 다른 요소에 대해 알고 있는 정보의 양으로 결정된다.
문제는 의존성의 존재가 아니라 의존성의 정도다.
바람직한 의존성이란 무엇일까? 그것은 재사용성과 관련이 있다.
어떤 의존성이 다양한 환경에서 클래스를 재사용할 수 없도록 제한한다면 그 의존성은 바람직하지 못한 것이다.
바람직한 의존성이란 컨텍스트에 독립적인 의존성을 의미하며 다양한 환경에서 재사용 가능성을 열어놓는 의존성을 의미한다.
추상화에 의존하라
객체에 대한 의존성은 3가지로 분류할 수 있고, 아래로 갈수록 결합도가 느슨해진다.
- 구체 클래스 의존성
- 추상 클래스 의존성
- 인터페이스 의존성
의존하는 대상이 추상적일수록 결합도는 더 낮아진다.
같은 DIP여도, 추상 클래스보다 인터페이스에 의존하는 것이 더 낮은 결합도를 이룰 수 있다.
'CS > OOP' 카테고리의 다른 글
[오브젝트] 10장 : 상속의 문제점과 추상화 (1) | 2024.02.05 |
---|---|
[오브젝트] 9장 : 유연한 설계를 하려면 OCP, DIP를 지켜라 (0) | 2024.02.01 |
[오브젝트] 7장 : 기능 분해의 측면에서 본 OOP (1) | 2024.01.23 |
[오브젝트] 6장 - 메시지와 인터페이스 (0) | 2024.01.22 |
[오브젝트] 5장 : 책임 할당과 책임 중심 설계 (0) | 2024.01.18 |