참고
Spring core basic 시리즈는 김영한 님의 "스프링 핵심 원리 - 기본편" 강의를 정리한 글입니다. 글에 첨부된 사진은 해당 강의의 강의 자료에서 캡쳐한 것입니다. 제 Github에만 올려뒀다가, 정보 공유와 강의 홍보(?)를 위해 블로그에도 업로드합니다. 마크다운을 잘 쓰지 못해서 가독성이 조금 떨어지는 점 양해 바랍니다.
스프링 핵심 원리 - 기본편 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
SOLID가 어떻게 적용되었는가?
SRP, DIP, OCP가 적용되었다.
단일 책임 원칙 SRP
한 클래스는 하나의 책임만 가져야 한다.
기존의 클라이언트 객체는 직접 구현 객체를 생성하고, 연결하고, 실행하는 다양한 책임을 가지고 있었다. 따라서 SRP 단일 책임 원칙을 지키기 위해 관심사를 분리했다.
구현 객체를 생성하고 연결하는 책임은 AppConfig가 담당하고, 클라이언트 객체는 핵심 로직을 실행하는 책임만 담당하게 했다.
의존관계 역전 원칙 DIP
프로그래머는 추상화에 의존하고, 구체화에 의존하면 안된다.
DI는 원칙을 따르는 방법 중 하나이다.
기존에는 새로운 할인 정책을 개발하고, 적용하려고 하니 클라이언트 코드도 함께 변경해야 했다. 왜냐하면 클라이언트 코드(OrderServiceImpl)는 DiscountPolicy 인터페이스에 의존하는 것 같았지만, FixDiscountPolicy구현 클래스에도 함께 의존했다. -> DIP 위반
클라이언트 코드가 DiscountPolicy 추상화 인터페이스에만 의존하도록 코드를 변경하면, 인터페이스만으로는 객체를 생성할 수 없으므로 프로그램이 동작하지 않는다.
따라서 AppConfig가 FixDiscountPolicy 객체 인스턴스를 클라이언트 코드 대신 생성해서, 클라이언트 코드에 의존관계를 주입하게끔 만들었다. -> DIP 만족
개방-폐쇄 원칙 OCP
소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
다형성을 사용하고, 클라이언트가 DIP를 잘 지키면 OCP를 만족시킬 수 있다.
AppConfig를 통해 애플리케이션을 사용 영역과 구성 영역으로 구분짓는다. AppConfig가 의존관계를 FixDiscountPolicy에서 RateDiscountPolicy 로 변경해서 클라이언트 코드에 주입하기 때문에, 클라이언트 코드는 변경하지 않아도 된다!
소프트웨어 요소를 새롭게 확장해도 사용 영역의 변경은 닫혀 있다!
'Spring > Spring core basic' 카테고리의 다른 글
[Spring core basic] 16 - 스프링으로 전환하기 (0) | 2022.05.02 |
---|---|
[Spring core basic] 15 - IOC, DI, 그리고 Container (0) | 2022.05.02 |
[Spring core basic] 13- 중간 정리 (0) | 2022.05.02 |
[Spring core basic] 12 - 새로운 구조와 할인 정책 적용 (0) | 2022.05.02 |
[Spring core basic] 11 - AppConfig 리팩토링 (0) | 2022.05.02 |
댓글