**좋은 객체 지향 설계의 5가지 원칙을 정리
(Clean Code로 유명한 Robert C. Martin)**
- SRP : 단일 책임 원칙 (Single Responsibility Principle)
- OCP : 개방 - 폐쇄 원칙 (Open / Closed Principle)
- LSP : 리스코프 치환 원칙 (Liskov Substitution Priciple)
- ISP : 인터페이스 분리 원칙 (Interface Segregation Principle)
- DIP : 의존 관계 역전 원칙 (Dependency Inversion Principle)
SRP : 단일 책임 원칙 (Single Responsibility Principle)
- 한 클래스는 하나의 책임만 가져야 한다
- 하나의 책임이라는 것은 모호하다
- 클 수도 있고 작을 수도 있다
- 문맥과 상황에 따라 다르다
- 중요한 기준은 변경이다
변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것
- Ex) UI 변경 → SQL부터 Application 코드까지 다 고쳐야 함 (X)
객체의 생성과 사용을 분리 (계층이 나누어져 있는 이유)
OCP : 개방 - 폐쇄 원칙 (Open / Closed Principle)
- 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다
- 이런 거짓말 같은 말이?
(기능을 확장하려면, 당연히 기존 코드를 변경해야 하지 않나?
변경을 안해도 된다고?)
- 어떻게 코드의 변경 없이 기능을 추가하지?