[2. 좋은 객체 지향 설계의 5가지 원칙(SOLID)]
1. SRP 단일 책임 원칙
- 하나의 클래스는 하나의 책임만 가져야 한다.
하나의 책임에 대한 판단의 기준은 ?
- 변경이 있을 때 파급 효과가 적으면 SRP를 잘 따른것
2. OCP 개방-폐쇄 원칙
- 확장에는 열려 있으나 변경에는 닫혀 있어야함.
문제점
- 다형성을 사용하기 위해서 구현 객체를 변경하려면 클라이언트 코드를 변경해야함
→ 이를 해결하기 위해서 DI, IOC 컨테이너와 같은 것들이 필요
3. LSP 리스코프 치환 원칙
- 하위 클래스의 객체를 상위 클래스의 객체에 넣어도 기능적으로 문제없이 동작되어야함
❓
예시를 찾아보니 정사각형과 직사각형의 관계를 대입해서 생각해보면 단순히 정사각형이 직사각형의 상속을 받는다고 생각할 떄 직사각형의 생성자에서 비롯한 문제에 대해 다른 어떤 조치가 필요성을 느낄 수 있는 부분이 이 원칙과 관련이 있었습니다.
4. ISP 인터페이스 분리 원칙
- 클라이언트가 사용하는 인터페이스를 하나가 아닌 여러개로 잘게 나누어 만들어야함
5. DIP 의존관계 역전 원칙
- 추상화에 의존해야함 = 구현 클래스가 아닌 역할(인터페이스)에 의존해야함
정리
객체지향에서 다형성 만으로는 OCP, DIP를 지킬 수 없다. → 다른 무언가가 더 필요하다.