어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이의 의존선이 존재
의존성은 구현 시점과 실행 시점에 따라 다른 의미를 갖는다.
실행 시점 : 의존하는 객체가 정상적으로 동작하기 위해서는 실해 시에 의존 대상 객체가 반드시 존재
구현 시점 : 의존 대상 객체가 변경 때 의존하는 객체도 변경
의존성 : 변경에 의한 영향의 전파 가능성
의존성 전이(transitive dependency)
A 객체가 B 객체에 의존하면 A객체는 B객체가 의존하는 다른 객체에 대해서 의존적이다.
의존성의 종류
직접 의존성: 한 요소가 다른 요소에 직접 의존하는 경우
간접 의존성: 한 다리 건너서 의존하는 경우 의존성 전이에 의해 영향이 전파 되는 경우
런타임 의존성: 애플리케이션이 실행되는 시점
컴파일 타임 의존성: 구현 시점의 의존성
런타임의 주인공은 객체
컴파일의 주인공은 클래스
어떤 클래스의 인스턴스가 다양한 클래스의 인스턴스와 협력하기 위해선 협력할 인스턴스의 구체적인 클래스를 알아서는 안된다.
컨텍스트 독립성: 클래스가 특정한 문맥에 대해 최소한의 가정만으로 이뤄져 있는 상태
자신이 실행될 컨텍스트에 대한 구체적인 정보를 최대한 적제 알아야한다.
의존성 해결을 위한 3가지 방법
1. 생성자 방식 : 객체를 생성하는 시점에서 생성자를 통해 의존성 해결
2. setter 방식 : 객체 생성 후 setter 메서드를 통해 의존성 해결
3. 메서드 인자 방식 : 메서드 실행시 인자를 통해 의존성 해결
의존성 자체가 나쁜 게 아니다. 협력을 위해선 의존성이 반드시 존재해야하며 좋은 의존성을 만드는 것이 목표
좋은 의존성이란 재사용성과 관련이있다. 의존성이 다양한 환경에서 재사용할 수 있다면 바람직하다.
세련된 언어로 의존성이 나쁠 때 결합도가 높다고 하고 아닐때 낮다고 한다.
'Paradigm > OOP' 카테고리의 다른 글
추상클래스와 인터페이스 차이 (0) | 2022.08.21 |
---|---|
클래스와 객체 (0) | 2021.09.29 |
추상화 (0) | 2021.09.28 |
역할, 책임, 협력, 메세지 (0) | 2021.09.28 |
추상화 매커니즘 (0) | 2021.09.28 |