Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
01-09 04:37
- Today
- Total
Tags
- 객체지향
- 스프링 빈 조회
- 스프링 컨테이너
- 스프링 Configuration
- 빈 중복 오류
- qualifier
- Spring interceptor
- RequiredArgsConstructor
- DI컨테이너
- ComponentScan
- UsernamePasswordAuthenticationFilter
- 라즈베리파이
- 생성자 주입
- 스프링 빈
- Spring
- Servlet Filter
- docker
- HandlerMethodArgumentResolver
- DI
- 도커
- 스프링 싱글톤
- beandefinition
- 싱글톤 컨테이너
- 롬복 Qualifier
- springsecurity
- 의존관계 주입
- autowired
- Autowired 옵션
- 라즈베리파이4
- 스프링
Archives
그날그날 공부기록
IoC, DI, 컨테이너 본문
public class OrderServiceImpl implements OrderService{
//어떤 인터페이스에 의존하는지 알 수 있다.
//하지만 어떤 구현체가 들어올진 실행 시점에서 결졍된다.
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
}
제어의 역전 IoC(Inversion of Control)
- 프로그램의 제어 흐름을 직접 하는 것이 아니라 외부에서 관리하는 것.
- 이 전에 포스팅한 OrderServiceImpl의 초반 코드는 구현 객체가 스스로 필요한 구현체들을 생성하고 사용했다. 하지만 이후의 OrderServiceImpl은 필요한 인터페이스만 호출하고 자신의 로직에만 집중한다. 외부의 AppConfig가 그 인터페이스에 대한 구현체를 주입해준다.
의존관계 주입 DI(Dependency Injection)
- 정적인 클래스 의존 관계, 싱행시점에 결정되는 동적인 객체(인스턴스) 의존관계 둘을 분리하여 생각
- 정적인 클래스 의존관계
- 정적 관계는 애플리케이션을 실행하지 않아도 분석할 수 있다.
- OrderServiceImpl은 MemberRepository와 DiscountPolicy에 의존 → 정적 의존 관계
- 하지만 이런 의존관계만으로는 어떤 객체가 OrderServiceImpl에 주입될지 알 수 없음 → 동적 의존 관계
- 동적인 객체 인스턴스 의존 관계
- 애플리케이션 실행 시점에 생성되어야 알 수 있다.
- 실행 시점에 외부에서 객체가 생성되고 클라이언트에 전달하여 연결 되는 것을 **의존관계 주입(DI)**이라 한다.
의존관계 주입을 사용하면 정적인 클래스 의존관계를 변경하지 않고 동적인 객체 인스턴스 의존관계를 쉽게 변경 가능하다. → 클라이언트 코드를 수정하지 않아도 된다.
DI 컨테이너(IoC 컨테이너)
- 외부에서 객체를 생성하고 관리하며 의존관계를 연결해준다.
'Spring 공부' 카테고리의 다른 글
스프링 빈 조회 (0) | 2022.07.11 |
---|---|
스프링 컨테이너 생성 과정 (0) | 2022.07.07 |
스프링 DI 이해하기 (0) | 2022.07.05 |
SOLID (0) | 2022.07.05 |
스프링과 객체지향 (0) | 2022.07.05 |
Comments