계층형 아키텍처에 대한 불만을 늘어놓았으니 이번 장에서는 대안을 이야기한다. 먼저 단일 책임 원칙(SRP)와 의존성 역전 원칙(DIP)에 대해 이야기하는 것으로 시작하자.

단일 책임 원칙

이 원칙의 일반적인 해석은 아래와 같다

하나의 컴포넌트는 오로지 한 가지 일만 해야 하고, 그것을 올바르게 수행해야 한다.

→ 이는 좋은 원칙이지만 단일 책임 원칙의 실제 의도는 아니다. 단일 책임 원칙의 실제 정의는 아래와 같다.

컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다.

→ 보다시피 ‘책임’을 ‘오로지 한 가지 일만 하는 것’보다는 ‘변경할 이유’로 해석해야 한다.

아키텍처에서는 이것이 어떤 의미일까?

만약 컴포넌트를 변경할 이유가 한 가지라면 우리가 어떤 다른 이유로 소프트웨어를 변경하더라도 이 컴포넌트에 대해서는 전혀 신경 쓸 필요가 없다.

소프트웨어가 변경되더라도 여전히 기대한 대로 동작할 것이기 때문이다.

다만, 아쉽게도 변경할 이유라는 것은 컴포넌트 간의 의존성을 통해 너무도 쉽게 전파된다.