단일 책임 원칙
단일 책임 원칙의 일반적인 해석
→ 하나의 컴포넌트는 오로지 한 가지 일만 해야 하고, 그것을 올바르게 수행해야 한다.
- 이는 좋은 조언이지만, 단일 책임 원칙의 실제 의도는 아니다!
단일 책임 원칙의 실제 정의
→ 컴포넌트를 변경하는 이유는 오직 하나뿐이어야 한다.
- ‘책임’은 사실 ‘오로지 한 가지 일만 하는 것’보다는 ‘변경할 이유’로 해석해야 한다.
아키텍처에서는 이것이 어떤 의미일까?
-
만약 컴포넌트를 변경할 이유가 한 가지라면 우리가 어떤 다른 이유로 소프트웨어를 변경하더라도, 이 컴포넌트에 대해서는 전혀 신경 쓸 필요가 없다.
- 소프트웨어가 변경되더라도 여전히 우리가 기대한 대로 동작할 것이기 때문이다.
-
하지만, 안타깝게도 변경할 이유라는 것은 컴포넌트 간의 의존성을 통해 너무도 쉽게 전파된다.
- 컴포넌트 A는 다른 여러 컴포넌트에 의존하는 반면, 컴포넌트 E는 의존하는 것이 전혀 없다.
- 컴포넌트 E를 변경할 유일한 이유는 새로운 요구사항에 의해 E의 기능을 바꿔야 할 때뿐이다.
- 반면, 컴포넌트 A의 경우에는 모든 컴포넌트에 의존하고 있기 때문에, 다른 어떤 컴포넌트가 바뀌든지 같이 바뀌어야 한다!