스프링 핵심원리
객체 지향 설계 5가지원칙
- SRP : 단일 책임 원칙 (single responsibility principle) → 한 클래스는 하나의 책임만 가져야 함
- OCP : 개방-폐쇄 원칙 (Open/closed principle) → 기존 코드 변경x 기능추가o
- LSP : 리스코프 치환 원칙 (Liskov substitution principle) → 자식 객체가 부모 객체를 대체할 수 있다. ex) 컬렉션 프레임워크
- ISP : 인터페이스 분리 원칙 (Interface segregation principle) → 객체는 자신이 사용하는 메서드에만 의존해야 한다.
- DIP : 의존관계 역전 원칙 (Dependency inversion principle) → 객체는 구체적인 객체가 아닌 추상화(추상클래스 or 인터페이스)에 의존해야 한다.
AppConfig 리팩토링
생성자가 인터페이스에 의존하므로 각 구현체 정보만 확인할 수 있기 때문에 객체의 중복 생성이 존재하며, 각 클래스의 역할이 잘 안보일 수 있다.
AppConfig를 사용하여 애플리케이션이 크게 사용 영역과 객체를 생성하고 구현체를 할당하여 구성하는(Configuration) 영역으로 나누는게 좋다.
ex)
할인정책(기능)을 변경해도 AppConfig만 수정하면된다.
제어의역전 IoC (Inversion of Control)
AppConfig가 등장한 이후 구현 객체는 자신의 로직을 실행하는 역할만 담당한다. 프로그램의 제어 흐름은 AppConfig가 가져가며 권한도 AppConfig가 가지고있다. 위의 사진으로 예를들면
OrderServiceImpl 도 AppConfig가 생성하며 OrderServiceImpl이 아닌 OrderService 인터페이스의 다른 구현 객체를 생성하고 실행도 가능하다.
이렇듯 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(Ioc)이라 한다.
의존관계 주입 DI (Dependency Injection)
의존관계를 외부에서 결정하고 주입하는 것이 의존관계 주입이라 한다. 예를들어 애플리케이션이 실행시점(런타임)에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달하여 클라이언트와 서버의 실제 의존관계가 연결되는 것을 말한다.
이처럼 AppConfig 처럼 객체를 생성하고 관리하면서 의존관계를 연결해주는 것을 IoC 컨테이너 또는 DI 컨테이너 라한다. 외존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너로 불림
'Develop > Spring' 카테고리의 다른 글
[Spring/기본편] 의존관계 자동 주입 (0) | 2024.03.19 |
---|---|
[Spring/기본편] 컴포넌트 스캔 (0) | 2024.03.19 |
[Spring/기본편] 싱글톤 컨테이너 (0) | 2024.03.19 |
[Spring/기본편] 스프링 빈 조회 (0) | 2024.03.19 |
[Spring/기본편] 스프링 컨테이너 (0) | 2024.03.18 |
댓글