Clean code로 유명한 Robert Martin이 좋은 객체 설계의 5가지 원칙을 정리했다.
하나씩 알아보자.
Single Responsibility Principle
하나의 클래스는 하나의 책임만 가져야한다.
"책임"은 상황에 따라 클 수도, 작을 수도 있다.
변경 시 파급 효과가 적으면, SRP를 잘 지킨 것이다.
Open Closed Principle
확장에는 열려있으나, 변경에는 닫혀있어야한다.
Liskov Substitutuion Principle
객체는 프로그램의 정확성을 유지한 채 하위 객체로 바꿀 수 있어야한다.
Interface에 대한 Class는 Interface의 규약을 반드시 지켜야 함을 의미한다.
예를 들어, 자동차 엑셀의 인터페이스에는 앞으로 전진해야함이 명시된다.
만일 구현체에서 뒤로 가도록 구현한다면? ...상상만 해도 끔찍하다.
Interface Segragation Principle
Interface는 작고 명확하게 분리되어야 한다.
하나의 Interface에서 사용하지 않는 기능또한 구현되지 않도록, Client의 요구에 맞춰 명확하게 구현 및 분리되어야 한다.
Dependency Inversion Principle
프로그래머는 구체화가 아닌 추상화에 의존해야한다.
즉, Class가 아닌 Interface에 의지해야한다.
같은 말로, 구현이 아닌 역할에 의지해야한다.