[스프링] IoC? DI? 컨테이너? 빈?

Jina·2024년 7월 16일
0

Spring

목록 보기
2/4

스프링을 처음 시작하면 이 용어들을 마주하게 된다.

그리고 IoC를 번역한 '제어의 역전', DI를 번역한 '의존성 주입' 이런 말을 들으면 더 미궁으로 빠지고...이게 대체 뭔 소린가 싶게 된다.

하지만 생각보다 이 개념들은 어렵지 않다.

먼저, IoC부터 알아보자.

IoC(Inversion of Control)를 한 마디로 나타내면?
객체를 관리하는 주도권을 개발자한테서 스프링이 가져가는 것

기존에 자바에서는

public class Main {
    public static void main(String[] args) {
        Car gasCar = new GasCar();
        Car electricCar = new ElectricCar();
        Car hydrogenCar = new HydrogenCar();

        gasCar.charge();
        electricCar.charge();
        hydrogenCar.charge();
    }
}

이런 식으로 개발자가 직접 객체를 생성하고 관리해야 한다.

그런데 매번 이렇게 개발자가 하는 일이 귀찮고 번거로울 수 있다...
그래서 이 일을 스프링에게 넘겨버리는 것이다.

즉, 스프링이 알아서 객체를 생성하고 관리하는 것!

이것이 IoC이다.

그런데 스프링은 객체를 생성하면 어디다가 담아둘까?
그냥 여기저기 아무데나 두면 관리하기 힘들텐데?

그래서 등장한 것이 '컨테이너'이다.

컨테이너

컨테이너란?
스프링이 관리하는 객체를 담는 곳

그냥 쉽게 말해서 객체를 담는 상자라고 보면 된다.
이때 객체는 일반적인 객체가 아닌 스프링이 생성하고 관리하는 객체이고...!

그렇다면 이렇게 스프링이 관리하는 객체와 지금까지 말한 객체를 구별하여 말할 수는 없을까?

스프링 빈

사실 스프링이 생성하고 관리하는 객체는 일컫는 용어가 따로 있다.
그것이 바로 "스프링 빈"이다.

그렇다면 IoC, 컨테이너, 빈은 이제 무슨 소리인지 알겠고, 남은 건 DI (Dependency Injection)이다.

DI (Dependency Injection)

개발자가 생성하고 관리하던 객체를 스프링이 맡아서 관리하게 되었고... 이게 IoC이고... 이렇게 스프링이 관리하는 객체를 빈이라고 하고, 빈을 담는 상자를 컨테이너라고 한다.

지금까지 한 얘기를 요약한 것이다.

그런데 스프링이 객체를 맡아서 관리하면 개발자는 이걸 어떻게 갖다쓰지?

여기에서 나온 개념이 DI이다.

DI란?
개발자가 스프링 컨테이너가 관리하는 객체(빈)를 가져가서 사용하는 것

조금 어렵게 말하면, 'IoC를 구현하기 위해서 객체를 주입받는 것'을 DI라고 할 수 있다.

즉, IoC로 인해 DI의 개념도 등장한 것이고, DI가 등장하면서 비로소 개발자는 스프링에게 객체 관리를 맡기고 이걸 갖다쓰기만 할 수 있는 것이다.

0개의 댓글