더북(TheBook)

2.2.1 설계 원칙 위반

설계 원칙은 효율적이고 고품질 소프트웨어를 생성하는 지침을 설계자에게 제공한다. 설계자가 설계 원칙을 위반할 때 위반이 악취로 드러난다.

java.util 패키지의 일부인 Calendar 클래스를 살펴보자. 실생활의 달력 기능을 추상화한 이 클래스는 날짜와 관련된 기능을 제공한다고 예상할 수 있다(실제로 그렇다). 하지만 java.util.Calendar 클래스는 시간 관련 기능 역시 제공한다. 추상화는 유일한 책임만 맡아야 한다. java.util.Calendar 클래스에 여러 책임을 부과했기 때문에 이는 추상화 원칙을 위반했다(구체적으로 단일 책임 원칙 위반에 걸린다). 이런 위반을 다면적인 추상화 악취(3.4절 참조)라고 하는데, 클래스가 여러 책임을 지원하기 때문이다.

java.util.Vector를 확장한 java.util.Stack 클래스를 생각해 보자. StackVector는 개념적으로 IS-A 관계를 공유하지 않는다. Vector 인스턴스를 기대하는 곳에 Stack 객체로 대체할 수 없기 때문이다. 여기서 이런 설계는 계층 원칙 위반을 시사한다(구체적으로 대체 가능성 원칙LSP 위반이며, 부록 A를 참조한다). 이런 악취를 망가진 계층이라고 한다(6.8절 참조). 대체 가능성이 망가졌기 때문이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.