포스트

8장. 의존성 관리하기

8장. 의존성 관리하기


객체지향 설계의 핵심

  • 협력을 위해 필요한 의존성은 유지하면서도 변경을 방해하는 의존성은 제거하는데 있다.
  • 이런 관점에서 객체지향 설계란 의존성을 관리하는 것이고 객체가 변화를 받아들일 수 있게 의존성을 정리하는 기술이라고 할 수 있다.


❐ 1. 의존성 이해하기


1-1. 변경과 의존성

실행 시점과 구현 시점

  • 실행 시점 : 의존하는 객체가 정상적으로 동작하기 위해서는 실행 시에 의존 대상 객체가 반드시 존재해야 한다.
  • 구현 시점 : 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경된다.


의존성

  • 의존하고 있는 대상의 변경에 영향을 받을 수 있는 가능성
  • 의존성은 방향성을 가지며 항상 단방향이다.
  • 어떤 객체가 예정된 작업을 정상적으로 수행하기 위해 다른 객체를 필요로 하는 경우
    두객체 사이에 의존성이 존재한다 라고 한다.


두 요소 사이의 의존성이 나타내는 의미

  • 의존되는 요소가 변경될 때 의존하는 요소도 함께 변경될 수 있음을 의미한다.
  • 따라서 의존성은 변경에 의한 영향의 전파 가능성을 암시한다.


1-2. 의존성 전이

의존성 전이

  • A → B → C : C가 변경되면, A까지 변경될 수 있음.
  • 하지만 모든 경우에 의존성이 전이 되는것은 아니다.
  • 전이될지 여부는 변경의 뱡향 & 캡슐화의 정도에 따라 달라진다.
  • 즉, 의존성 전이는 변경에 의해 영향이 널리 전파될 수 있다는 경고 정도.


직접 의존성과 간접 의존성

  • 직접 의존성 : 한 요소가 다른 요소에 직접 의존하는 경우
  • 간접 의존성 : 직접적인 관계는 없지만, 의존성 전이에 의해 영향이 전파되는 경우


1-3. 런타임 의존성과 컴파일타임 의존성

런타임 의존성

  • 객체 사이의 의존성
  • 협력할 객체가 어떤 것인지는 런타임에 알아야 한다.
  • Movie ↔ PercentDiscountPolicy / Movie ↔ AmountDiscountPolicy


컴파일타임 의존성

  • 클래스 사이의 의존성
  • Movie ↔ DiscountPolicy


1-4. 컨텍스트의 독립성

컨텍스트 독립성이란?

  • 클래스가 사용될 특정한 문맥(context)에 대햇 최소한의 가정만으로 이뤄져 있는 것.
  • 구체 클래스에 대한 의존한다는 뜻은?
    • 클래스의 인스턴스가 어떤 문맥에서 사용될 것인지를 구체적으로 명시하는 것과 같다.
  • 설계가 유연해지기 위해서는
    • 가능한 한 자신이 실행될 컨텍스트에 대한 구체적인 정보를 최대한 적게 알아야 한다.


1-5. 의존성 해결하기

의존성 해결이란?

  • 컴파일타임 의존성을 실행 컨텍스트에 맞는 적절한 런타임 의존성으로 교체하는 것.
  • 의존성을 해결하기 위한 일반적인 세 가지 방법
    1. 객체를 생성하는 시점에 생성자를 통해 의존성을 해결
    2. 객체 생성 후 setter 메서드를 통해 의존성 해결
    3. 메서드 실행 시 인자를 이용해 의존성 해결
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.