SpringBoot #1.2 - IoC, DDD, ApplicationContext, DI
IoC (Inversion of Control) - 제어의 역전
- 기존 제어
- 모든 작업을 사용하는 쪽에서 제어하는 구조
- Order entity가 사용할 Voucher 클래스를 결정하고, 객체를 생성
- 역전 제어
- 객체가 자신이 사용할 개체를 선택하지 않고, 생성하지도 않음.
- 프레임워크가 흐름 주도하면서 개발자가 만든 애플리케이션 코드 사용 →
Hollywood Principle
DDD
- Domain Model Layer
- Infrastructure-Persistance Layer
- Data Tier
Application Context @Context
- IoC 컨테이너는 객체 생성, 조합해주는 프레임워크
- IoC 컨테이너 안에서 Object(
Bean
) 생성되고, 조합됨.
- spring에서 제공하는 IoC 컨테이너가 ApplicationContext 인터페이스
- 실제 만들어야 할 Bean 정보를 Configuration Metadata에서 받아옴.
- 메타데이터를 이용해서 IoC 컨테이너에 의해 관리되는 Bean을 생성, 구성
- XML 방식 < java기반 방식(Annotation)
- 객체들의 도면
- BeanFactory 상속
- Bean
- IoC 컨테이너에 의해 관리되는 객체
@Bean
DI (Dependency Injection)
- entity가 어떤 service, repository 객체를 생성할지 스스로 결정하지 않고, 생성자를 통해 외부에서 객체를 주입받는 패턴
- 생성자 주입 패턴
- setter 기반 주입 패턴
- DI로 원하는 것
- 생성할 객체의 null 방지
- 생성할 객체의 immutable
- 사용자 마음에 따라 완전히 초기화된 객체 반환
- 그래도 생성자 구문이 너무 길어지면 안 좋으니 적절하게 사용해라.