🤗 인프런 [스프링 핵심원리-기본편]을 듣고 기록하는 글입니다
※ SOLID 중 SRP, DIP, OCP가 어떻게 적용됐는지 이론설명
한 클래스는 하나의 책임만 가져야한다
문제사항 :
전에는 Service가 구현객체를 정하고 연결하는등의 다양한 책임을 가지고 있었음
해결방법 :
1. 구현객체를 생성하고 연결하는 책임을 AppConfig에게 넘겨줌
2. 클라이언트 객체는 실행하는 책임만 담당
객체는 추상화에 의존해야지, 구체화에 의존하면 안된다.
문제사항 :
OrderServiceImpl가 DiscountPolicy라는 추상화 interface에 의존하는것 같았지만, FixDiscountPolicy라는 구체화 구현 클래스에도 의존했었음
해결방법 :
1. 클라이언트 코드가 DiscountPolicy에만 의존하도록 코드를 변경
2. 구현체 주입 부분이 사라졌기 때문에 문제가 생김
3. AppConfig를 만들어서 FixDiscountPolicy 객체 인스턴스를 대신 생성해주는 방식으로 의존관계 주입
문제사항 :
사용영역에서 구성도 담당했기 때문에 소프트웨어 요소를 확장하면 클라이언트 코드도 어쩔 수 없이 변경이 됐었음
해결방법 :
1. application을 사용영역(Service등)과 구성영역(AppConfig)으로 나눔
2. AppConfig에서 FixDiscountPolicy를 RateDiscountPolicy로 변경을 하고, 그게 클라이언트 코드에 주입되는것이므로 클라 코드는 변경이 안됨
3. 그래서, 소프트웨어 요소를 새롭게 확장해도 사용 영역의 변경은 닫혀있음.
프로그램의 제어 흐름을 직접 제어하는 것이 아니라, 외부에서 관리하는 것.
※ 프레임워크 vs 라이브러리
의존관계 주입이라고 부름
의존관계는 1)정적인 클래스 의존관계 2)실행 시점에 결정되는 동적인 객체(instance)의 의존관계로 둘로 분리해서 생각해야함