개발 서적 기록/오브젝트_조영호

20일차 - 런타임과 컴파일 시점의 의존성을 위해 컨텍스트는 독립되어야한다

밍 끄적 2023. 8. 22. 16:10
728x90

2023.08.22 TUE

247p ~ 263p

 

19일차 내용 ⬇️

2023.08.21 - [개발 서적 기록] - 19일차 - 모듈로 정보 은닉하기

 

19일차 - 모듈로 정보 은닉하기

2023.08.21 MON 234p ~ 249p 18일차 내용 ⬇️ 2023.08.21 - [개발 서적 기록/오브젝트_조영호] - 18일차 - 하향식 기능 분해 설계 18일차 - 하향식 기능 분해 설계 2023.08.20 SUN 223p ~ 234p 17일차 내용 ⬇️ 2023.08.19

magenta-ming.tistory.com


시점에 따른 의존성

실행 시점에서는, 의존하는 객체가 정상적으로 동작하기 위해서 의존 대상 객체가 반드시 존재해야한다.

반면, 구현 시점에서는, 의존 대상 객체가 변경될 경우, 의존하는 객체도 함께 변경된다.

 

의존성 표현하기

예제를 통해 표현 방식을 살펴보자.

PeriodCondition 클래스는 PeriodCondition, DayOfWeek, LocalTime, Screening 에 의존하고 있다.

 

PeriodCondition 클래스는 DiscountCondition 인터페이스를 구현하고 있다.

PeriodCondition 클래스는 속성 필드로 DayOfWeek, LocalTime 인스턴스를 가지고 있다.

PeriodCondition 클래스는 Screening을 메서드의 파라미터로 가지고 있다.

따라서 의존성의 종류가 다르기에, 종류에 따라서 다르게 의존성을 표기할 수 있다.

 

의존성 전이

A가 B에 대해서 의존한다면, A는 B가 의존하는 대상 C에 대해서도 의존할 수 있다.

 

하지만, B가 내부 구현을 효과적으로 캡슐화하고 있다면, A는 C에 대해 의존하지 않는다.

그래서 모든 경우에 의존성이 전이되는 것은 아니다. 의존성 전이는 변경의 방향과 캡슐화의 정도에 따라 다르다.

 

런타임 의존성과 컴파일 타임 의존성 간의 컨텍스트 독립성

컴파일 타임에서는 A가 C에 대해서 의존하지 않았지만, 런타임에서는 의존할 수 있다.

예를 들어, A가 B에 대해서 의존하고 있었으나, C가 B의 구현체임에 따라 런타임에서는 C에 의존하게 될 수 있는 것이다.

 

그래서 어떤 클래스의 인스턴스가 다양한 클래스의 인스턴스와 협력하기 위해서는, 협력할 인스턴스의 구체적인 클래스를 알아서는 안된다.

실제로 협력할 객체는 런타임에만 알 수 있도록, 해결할 수 있도록 설계해야한다.

그렇지 않으면 설계의 유연성과 재사용성이 떨어진다. 구체적인 클래스를 알면 알 수록 그 클래스가 사용하는 특정한 문맥에 강하게 결합된다.

 

즉, 컨텍스트 독립성이 보장되어야한다.

컨텍스트에 대한 정보가 적을 수록, 더 다양한 컨텍스트에서 재사용될 수 있어 유연하고 변경에 탄력적인 설계가 된다.

728x90