에자일 설계 - ChoDragon9/posts GitHub Wiki
설계의 악취
소프트웨어에 다음과 같은 느낌이 든다면 소프트웨어 재설계가 필요한 것을 알 수 있다.
- 부동성 : 다른 시스템에 재사용할 수 있는 컴포넌트를 구분하기 어려울 때
- 경직성 : 시스템을 변경하려면 시스템의 다른 부분들까지 많이 변경이 필요할 때
- 취약성 : 시스템을 변경하면 그 부분과 개념적으로 아무런 관련이 없는 부분이 망가질 때
- 점착성 : 변경 사항이 발생했을 때 설계를 유지하기 어려워 옳은 동작을 하기 어려울 때
- 불필요한 복잡성 : 현재 시점에서 필요하지 않은 설계가 포함이 되어 있을 때
- 불필요한 반복 : 단일 추상 개념으로 통합할 수 있는 반복적인 구조가 설계에 포함 될 때
- 불투명성 : 이해하기 어렵고 의도를 잘 표현하지 못할 때
원칙
단일 책임 원칙(SRP)
- 한 클래스는 한가지 변경 사유로만 수정되어야 함
- 퍼사드나 프록시 패턴을 사용해 책임을 분리하여 해결
개방 폐쇄 원칙(OCP)
- 클래스는 확장에는 열려야 하고, 변경에는 닫혀야 함
리스코프 치환 원칙(LSP)
- 서브 클래스는 기반 클래스로 대체 가능해야 함
인터페이스 분리 원칙(ISP)
- 클래스의 메소드를 직접 호출하지 않고, 고유의 인터페이스를 만들어서 사용하게 해야 함
의존 관계 역전 원칙(DIP)
- 상위/하위 관계, 구현은 추상화에 의존해야 하며, 추상화는 구현에 의존해서는 안됨