3. SpringFramework(스프링 프레임워크) - SOLID 원칙

1. 개요
- SRP(Single Responsibility Principle) - 단일 책임 원칙
- OCP(Open/closed principle) - 개방 / 폐쇄 원칙
- LSP(Liskov Substitution Principle) - 리스코프 치환 원칙
- ISP(Interface Segregation Principle) - 인터페이스 분리 원칙
- DIP(Dependency Inversion Priciple) - 의존관계 역전 원칙
2. 종류
2-1) SRP(단일 책임 원칙)
- 한 클래스는 하나의 책임만 가져야한다.
- 하나의 책임이라는 것은 모호
- 중요 기준은 변경
- 변경할 경우 파급 효과가 적으면 해당 원칙 적용
- ex) 객체의 생성과 사용을 분리
2-2) OCP(개방 / 폐쇄 원칙)
- 확장에는 열려있으나 변경에는 닫혀 있어야 한다는 개념
- 다형성 활용
- 인터페이스를 구현한 새로운 클래스를 생성하여 새로운 기능 구현
- 의문점 : 구현 객체를 변경하려면 클라이언트 코드를 변경
- 객체를 생성하고 연관관계를 맺어주는 별도의 조립, 설정자가 필요
2-3) LSP(리스코프 치환 원칙)
- 프로그램 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 변경 가능해야 한다는 원칙
- 다형성에서 하위 클래스는 인터페이스 규약을 지켜야한다는것, 다형성 지원을 위한 원칙, 인터페이스 구현 구현체는 신뢰성이 있어야 한다는 원칙을 지키기 위한 원칙
- ex) 자동차 인터페이스의 엑셀은 앞으로 가야한다는 원칙을 보장 -> 뒤로가게 구현한다면 원칙 위배
2-4) ISP(인터페이스 분리 원칙)
- 특정 클라이언트를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다는 원칙
- 인터페이스가 명확해지고 대체 가능성이 높아지는 장점
- 하나의 비즈니스 로직에 귀속된 여러 인터페이스 중 하나를 변경하더라도 다른 인터페이스에 귀속된 클라이언트에 영향을 주지 않는다는 의미로 해석
2-5) DIP(의존관계 역전 원칙)
- 추상화에 의존해아지 구체화에 의존하면 안되다는 원칙
- 의존성 주입이 해당 원칙의 대표적 예시
- 인터페이스에 의존하라는 의미
- 역할에 의존해야 한다는 의미로 인터페이스에 의존하도록 설계해야 변경이 자유로워진다는 의미
3. 결론
- 객체 지향의 핵심은 다형성
- 다형성 만으로는 OCP, DIP를 준수하기 어려움