1. 의존성 이해하기

어떤 객체와 협력하기 위해 두 객체 사이에 의존성이 필요하다.

의존성은 실행 시점과 구현 시점에 서로 다른 의미를 가진다.

의존성 전이

참조하는 객체가 참조하는 객체가 변경에 의해 영향이 퍼지는 경우

직접의존성과 간접의존성으로 나뉨

런타임 의존성과 컴파일 타임 의존성

런타임은 어플리케이션이 실행되는 시점, 컴파일은 작성한 코드의 구조

컴파일타임 구조와 런타임 구조 사이의 거리가 멀면 멀수록 설계가 유연해지고 재사용이 가능해진다.

컨텍스트 독립성

설계가 유연해지기 위해서는 가능한 한 자신이 실행될 컨텍스트에 대한 구체적인 정보를 최대한 적게 알아야 한다.

의존성 해결하기

  1. 객체를 생성하는 시점에 생성자를 통해 의존성 해결
  2. 객체 생성 후 setter 메서드를 통해 의존성 해결
  3. 메서드 실행 시 인자를 이용해 의존성 해결

2. 유연한 설계

의존성과 결합도

바람직한 의존성은 다양한 환경에서 재사용할 수 있어야 한다. (컨텍스트에 독립적인)

의존성과 결합도는 관점의 차이

지식이 결합을 낳는다