DI

szlee·2023년 10월 21일
0

Spring

목록 보기
3/15

의존관계 주입(Dependency Injection)

스프링 컨테이너(Application Context)가 하는 역할 중 가장 중요.

의존관계란?

A가 B를 의존한다는 건? 의존대상 B가 변하면 그것이 A에 영향을 미친다.
B의 기능이 추가되거나 형식이 바뀌면 그 영향이 A에 영향을 미친다.

의존성 주입의 핵심은 객체들 간의 상호작용이 최소한이었으면 좋겠다는 것이다.
즉, 내가 무엇이 필요하면 직접 만드는 것이 아니라 전달받도록 요청하게 된다.
만들어서 전달해주는 애가 바로 스프링 컨테이너이다.

예시)
햄버거 가게 요리사는 햄버거 레시피에 의존한다. 햄버거 레시피가 변화하게 되었을 때, 변화된 레시피에 따라서 요리사는 햄버거 만드는 방법을 수정해야 한다. 레시피의 변화가 요리사의 행위에 영향을 미쳤기 때문에, “요리사는 레시피에 의존한다”고 말할 수 있다. 코드로 표현해보면 다음과 같다.

class BurgerChef {
    private HamBurgerRecipe hamBurgerRecipe;

    public BurgerChef() {
        hamBurgerRecipe = new HamBurgerRecipe();        
    }
}

이를 생성자 주입 방식으로 변경해보면 다음과 같다.

class BurgerChef {
    private HamBurgerRecipe hamBurgerRecipe;

    public BurgerChef(HamBurgerRecipe hamBurgerRecipe) {
        this.hamBurgerRecipe = hamBurgerRecipe;
    }
}


여기 매개체가 IoC컨테이너 = 프레임워크(스프링 컨테이너)
직접 생성하여 의존하는 것이 아니라 스프링 컨테이너에서 생성한 것을 주입받아 사용한다.

https://tecoble.techcourse.co.kr/post/2021-04-27-dependency-injection/
https://velog.io/@sana/DI-%EC%9D%98%EC%A1%B4%EC%84%B1-%EC%A3%BC%EC%9E%85Dependency-Injection-%EC%9D%98-%EA%B0%9C%EB%85%90%EA%B3%BC-%EB%B0%A9%EB%B2%95

profile
🌱

0개의 댓글