경주장

8장 의존성 관리하기 02 유연한 설계 본문

기술서적/오브젝트

8장 의존성 관리하기 02 유연한 설계

달리는치타 2021. 9. 3. 16:01

의존성과 결합도

 

의존성 자체는 객체사이의 협력을 위해 필수적이다.

하지만 너무 높은 의존성은 유연함을 막아 재사용 할 수 없는 클래스설계로 이어진다.

 

바람직한 의존성 (= 약한 결합도 )은 재사용성과 관련이 있다.

바람직한 의존성 (= 약한 결합도 )은 컨텍스트에 독립적인 의존성을 의미한다.

 

지식이 결합을 낳는다.

: 하위 클래스에 대한 정보를 알변 알수록 강하게 결합된다.

 

=>

추상화에 의존하라!

아래 쪽으로 갈 수록(객체가 추상화 될 수록) 클라이언트가 알아야 하는 지식의 양이 적어지고 결합도가 느슨해진다.

  • 구체 클래스 의존성(concrete class dependency)
  • 추상 클래스 의존성(abstract class dependency)
  • 인터페이스 의존성(interface dependency)

 

의존성은 명시적(explicitly)으로 표현돼야 한다.

의존성이 명시적으로 표현되지 않으면 의존성 파악을 위해 내부 구현을 살펴 보아야한다.

public interface (생성자 혹은 Setter)를 통해 구현 외부에 의존성을 드러내어야 한다.

 

new는 해롭다.

new를 잘못 사용하면 클래스 사이의 결합도가 극단적으로 높아진다.

new를 호출하기 위해서는 구체 클래스의 이름을 직접 기술해야하며 클래스의 생성자 호출에 필요한 인자의 정보 까지도 알아야한다.

 

생성의 책임을 Client로 분리하면 클래스간의 결합도를 낮추고 유연한 설계를 할 수 있다.

 

가끔은 생성해도 무방하다.

구현의 사용 빈도에 따라 기본생성자로 사용 빈도가 높은 객체가 내부에서 생성되게 하는것은 바람직하다.

 

'기술서적 > 오브젝트' 카테고리의 다른 글

12장 다형성  (0) 2021.09.06
11장 합성과 유연한 설계  (0) 2021.09.05
10장 상속과 코드 재사용 1. 상속과 중복코드  (0) 2021.09.04
9장 유연한 설계  (0) 2021.09.03
8장 의존성 관리하기 01 - 의존성  (0) 2021.09.03