본문 바로가기
Spring(JAVA Framework)/Spring Core

IoC, DI 컨테이너

by 걸어가는 신사 2021. 8. 15.

1. 제어의 역전 IoC(Inversion of Control)

프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것
  • AppConfig가 등장한 이후에 구현 객체는 자신의 로직을 실행하는 역할만 담당한다. OrderServiceImpl은 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모른다. 
  • 프로그램에 대한 제어 흐름에 대한 권한은 모두 AppConfig가 가지고 있다. 
 

스프링 핵심 원리 이해2

스프링의 핵심기능을 사용하지 않은 상태로 개발을 해보고 객체지향의 원칙(OCP, DIP)을 지키기 위해 스프링 핵심 기능들이 무슨 역할을 하는지 알아보는 시간입니다. 1. 새로운 할인 정책 개발 (1)

choiyeonho903.tistory.com

 

2. 의존관계 주입 DI(Dependency Injection)

애플리케이션 실행 시점에 필요한 객체들의 인스턴스를 생성하고 클라이언트에 전달하여 서버와 클라이언트를 연결하는 것

(1) 정적인 클래스 의존관계

실행 이전에 코드상으로의 의존 관계
  • 클래스가 사용하는 import 코드만 보고 의존관계를 쉽게 판단할 수 있다. 
  • 이미 정해진 객체들을 참조한다.
package hello.core.order;

import hello.core.discount.DiscountPolicy;
import hello.core.member.Member;
import hello.core.member.MemberRepository;

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);
    }
}
OrderServiceImpl 클래스는 MemberRepository, DiscountPolicy 인터페이스에 정적으로 의존하고 있다.

 

(2) 동적인 객체 인스턴스 의존관계

애플리케이션 실행 시점에 실제 생성된 객체 인스턴스의 참조가 연결된 의존 관계
  • 다른 객체의 참조값만 만들고 있다가, 애플리케이션이 실제 실행될 때 인스턴스 값을 넘기는 방식이다.
  • 실제 구현체는 AppConfig라는 외부 객체에 의해 실행 전에 결정된다. 
 

스프링 핵심 원리 이해2

스프링의 핵심기능을 사용하지 않은 상태로 개발을 해보고 객체지향의 원칙(OCP, DIP)을 지키기 위해 스프링 핵심 기능들이 무슨 역할을 하는지 알아보는 시간입니다. 1. 새로운 할인 정책 개발 (1)

choiyeonho903.tistory.com

 

3. IoC 컨테이너, DI 컨테이너

객체를 생성하고 관리하면서 의존관계를 연결해 주는 컨테이너
  • AppConfig와 같은 역할을 하는 것을 IoC 컨테이너 또는 DI 컨테이너라 한다.
  • 의존관계 주입에 초점을 맞추어 최근에는 주로 DI 컨테이너라 한다.
  • 또는 어샘블러, 오브젝트 팩토리 등으로 불리기도 한다.

 


본 글은 김영한 님의 "스프링 핵심 원리"(인프런) 유료 강의를 들으며 요약, 정리하고 일부 정보를 추가 작성한 것입니다.

저작권 문제시 903yh@naver.com으로 연락 주시면 삭제하겠습니다.

반응형

'Spring(JAVA Framework) > Spring Core' 카테고리의 다른 글

스프링 빈 조회  (0) 2021.08.17
스프링 컨테이너와 생성과정  (0) 2021.08.16
스프링 핵심 원리 이해3  (0) 2021.08.15
스프링 핵심 원리 이해2  (0) 2021.08.15
스프링 핵심 원리 이해1  (0) 2021.08.14

댓글