You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
섹션 3. 스프링 핵심 원리 이해2 - 객체 지향 원리 적용
1. 새로운 할인 정책 개발
**기존의 정액 할인 정책이 정률 할인 정책으로 변경되는 상황 발생 **
RateDiscountPolicy 구현체 생성
RateDiscountPolicyTest 생성
성공하는 테스트와 실패하는 테스트 모두 점검해보는 것이 중요하다
2. 새로운 할인 정책 적용과 문제점
새로운 할인 정책을 적용하려면 클라이언트인 OrderServiceImpl을 수정해야 하는데 여기서 문제가 발생한다.
DIP 위반
OrderServiceImpl이 인터페이스인 DiscountPolicy, 구현체인 FixDiscountPolicy에 모두 의존하고 있다.
OCP 위반
기능을 변경하려면 클라이언트 코드인 OrderServiceImpl을 변경해야한다.
해결 방안
인터페이스에만 의존하도록 코드를 변경한다.
=> 구현체가 없는 문제 발생(null pointer exception)
3. 관심사의 분리
AppConfig
구현 객체를 생성하고, 연결하는 책임을 가진다.
4. AppConfig 리팩터링
5. 새로운 구조와 할인 정책 적용
정액 할인 정책을 정률 할인 정책으로 변경하려 한다. AppConfig만 변경하면 된다.
6. 전체 흐름 정리
새로운 할인 정책 개발, 적용시 문제점 발생
다형성 덕분에 새로운 할인 정책 코드를 개발하는 것에는 문제가 없었다. 그러나 새로운 할인 정책을 적용하려하니 클라이언트 코드도 변경해야하는 DIP 위반 발생
관심사의 분리
구현 객체를 생성하고 연결하는 기획자 역할의 AppConfig 등장, 애플리케이션을 사용 영역과 구성 영역으로 나누었다.
7. 좋은 객체 지향 설계의 5가지 원칙의 적용
SRP 단일 책임 원칙
DIP 의존 관계 원칙
OCP 개방 폐쇄 원칙
8. IoC, DI, 그리고 컨테이너
IoC 제어의 역전
DI 의존 관계 주입
정적인 클래스 의존 관계
동적인 객체 인스턴스 의존 관계
IOC, DI 컨테이너
AppConfig처럼 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것
의존 관계 주입에 초점을 맞추어 주로 DI컨테이너라고 부른다.
혹은 어셈블러, 오브젝트 팩토리 등으로 불리기도 한다.
9. 스프링으로 전환하기
@configuration
AppConfig에 설정을 구상한다 것을 알려주는 역할
@bean
스프링 컨테이너에 스프링 빈을 등록하는 역할
스프링 컨테이너 ApplicationContext
All reactions