서론

객체지향 설계의 핵심은 협력을 위해 필요한 의존성은 유지하면서도 변경을 방해하는 의존성은 제거하는데 있다.

이번 장에서는 충분히 협력적이면서도 유연한 객체를 만들기 위해 의존성을 관리하는 방법을 알아볼 것이다.


의존성 알아보기

변경과 의존성

의존성은 크게

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

이처럼 어떤 객체가 예정된 작업을 정상적으로 수행하기 위해 다른 객체를 필요로 하는 경우 두 객체 사이에 의존성이 존재한다고 말한다. 의존성은 방향성을 가지며 항상 단방향이다. Screening이 변경될 때 PeriodCodition이 영향을 받게 되지만 그 역은 성립하지 않는다. 이 경우 PeriodCodition이은 Screening에 의존하며 그림 8.1에 표현한 것처럼 PeriodCodition은 Screening으로 향하는 점선 화살표로 표시한다.

두 요소 사이의 의존성은 의존되는 요소가 변경될 때 의존하는 요소도 함께 변경될 수 있다는 것을 의미한다.

따라서 PeriodCondition은 DayOfWeek(), LocalTime(), Screening()에 대해 의존성을 가진다. (그림 8.2, 8.3 참고)


의존성 전이

의존성 전이가 의미하는 것은 PeriodCondition이 Screening에 의존할 경우 PeriodCondition은 Screening이 의존하는 대상에 대해서도 자동적으로 의존하게 된다는 것이다. 다시 말해서 Screening이 가지고 있는 의존성이 Screening에 의존하고 있는 periodCondition으로도 전파된다는 것이다.

의존성은 전이될 수 있기 떄문에 의존성의 종류를 직접 의존성과 간접 의존성으로 나누기도 한다.