에자일 설계 - ChoDragon9/posts GitHub Wiki

설계의 악취

소프트웨어에 다음과 같은 느낌이 든다면 소프트웨어 재설계가 필요한 것을 알 수 있다.

  • 부동성 : 다른 시스템에 재사용할 수 있는 컴포넌트를 구분하기 어려울 때
  • 경직성 : 시스템을 변경하려면 시스템의 다른 부분들까지 많이 변경이 필요할 때
  • 취약성 : 시스템을 변경하면 그 부분과 개념적으로 아무런 관련이 없는 부분이 망가질 때
  • 점착성 : 변경 사항이 발생했을 때 설계를 유지하기 어려워 옳은 동작을 하기 어려울 때
  • 불필요한 복잡성 : 현재 시점에서 필요하지 않은 설계가 포함이 되어 있을 때
  • 불필요한 반복 : 단일 추상 개념으로 통합할 수 있는 반복적인 구조가 설계에 포함 될 때
  • 불투명성 : 이해하기 어렵고 의도를 잘 표현하지 못할 때

원칙

단일 책임 원칙(SRP)

  • 한 클래스는 한가지 변경 사유로만 수정되어야 함
  • 퍼사드프록시 패턴을 사용해 책임을 분리하여 해결

개방 폐쇄 원칙(OCP)

  • 클래스는 확장에는 열려야 하고, 변경에는 닫혀야 함

리스코프 치환 원칙(LSP)

  • 서브 클래스는 기반 클래스로 대체 가능해야 함

인터페이스 분리 원칙(ISP)

  • 클래스의 메소드를 직접 호출하지 않고, 고유의 인터페이스를 만들어서 사용하게 해야 함

의존 관계 역전 원칙(DIP)

  • 상위/하위 관계, 구현은 추상화에 의존해야 하며, 추상화는 구현에 의존해서는 안됨