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