SOLID - 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리
- SRP: 단일 책임 원칙 ( Single Responsibility Principle )
- OCP: 개방 - 폐쇄 원칙 ( Open-Closed Principle )
- LSP: 리스코프 치환 원칙 ( Liskov Substitution Principle )
- ISP: 인터페이스 분리 원칙 ( Interface Segregation Principle )
- DIP: 의존관계 역전 원칙 ( Dependency Inversion Principle )
SRP - 단일 책임 원칙
- 한 클래스는 하나의 책임만 가져야 한다
- 하나의 책임이라는 것은 모호하다
- 채임이 클 수 도 있고, 작을 수도 있다
- 문맥과 상황에 따라 다르다
- 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것
OCP - 개방-폐쇄 원칙
- 소프트웨어 요소는
확장에는 열려
있으나 변경에는 닫혀
있어야 한다
- 다형성을 활용해보자
- 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현

문제점
- MemberService 클라이언트가 구현 클래스를 직접 선택
- val m: MemberRepository = MemoryMemberRepository() //기존 코드
- val m: MemberRepository = JdbcMemberRepository() //변경 코드
- 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다