본문 바로가기

Spring Boot

[Spring Boot] IoC/DI

728x90

IoC란?

IoC는 Inversion of Control의 약자로, 제어의 역전이라는 뜻을 가지고 있습니다.

자바에서 객체를 생성하기 위해서는 필요한 곳에서 직접 생성을 합니다.

public class A {
    B b = new B();
}

 

제어의 역전(IoC)은 다른 객체를 직접 생성하거나 제어하는 것이 아니라, 외부에서 관리하는 객체를 가져와 사용하는 것을 말합니다.

 

외부에서 객체 가져오기

public class A {
    private B b;
}

이전과 다르게 new 키워드를 사용하지 않으며, B 객체를 직접 생성하는 것이 아니라 외부에서 객체를 받아와서 사용하고 있습니다.

 

쉽게 설명하기 위해 "외부"라고 표현했지만, 정확하게는 스프링의 스프링 컨테이너에서 객체를 받아와서 사용하고 있습니다.

 

 

DI란?

DI는 Dependency Injection의 약자로, 의존성 주입이라는 뜻입니다. DI는 IoC를 구현하기 위해 사용하는 방법입니다. DI는 어떤 클래스가 다른 클래스에 의존한다는 것을 말합니다.

 

IoC/DI 예제

public class A {
    // A에서 B를 주입받음
    @Autowired
    private B b;
}

@Autowired라는 어노테이션은 스프링 컨테이너에 있는 빈을 주입하는 역할을 합니다.

.

IoC/DI란?

직접 객체를 생성하고 관리하는 대신, 스프링 컨테이너가 관리하는 빈(객체)을 주입하여 사용하는 것입니다.

IoC/DI의 개념은 스프링에서 핵심 개념으로 매우 중요하기 때문에 반드시 이해하고 넘어가야 합니다.

 

 

 

스프링 컨테이너란?

스프링은 스프링 컨테이너를 제공하며, 스프링 컨테이너는 빈의 생성과 소멸까지 생명 주기를 관리합니다. 또한, @Autowired 같은 어노테이션을 사용하여 빈을 주입받을 수 있게 DI를 제공합니다.

 

 

빈이란?

스프링 컨테이너가 생성하고 관리하는 객체입니다. 스프링은 빈을 스프링 컨테이너에 등록하기 위해 XML 파일 설정, 어노테이션 추가 등의 방법을 제공합니다.

 

 

어노테이션으로 빈 등록 예제

@Component
public class MyBean {
}

 

@Component 어노테이션을 붙이면 MyBean 클래스가 빈으로 등록되고, 스프링 컨테이너가 이 클래스를 관리합니다. 이때 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리하게 됩니다. 즉, MyBean 클래스의 빈 이름은 myBean이 됩니다.

정리

  • IoC (Inversion of Control): 객체의 생성과 관리를 개발자가 직접 하는 것이 아니라, 스프링 컨테이너와 같은 프레임워크가 대신 관리하는 것.
  • DI (Dependency Injection): 의존성 주입으로, IoC를 구현하는 방법. 클래스가 필요한 객체를 직접 생성하는 것이 아니라, 외부에서 주입받아 사용.
  • 스프링 컨테이너: 빈의 생명 주기를 관리하고, DI를 제공하는 역할을 하는 스프링의 핵심 컴포넌트.
  • 빈 (Bean): 스프링 컨테이너가 생성하고 관리하는 객체.

이러한 개념들은 스프링의 핵심 개념으로, 스프링을 제대로 사용하려면 반드시 이해하고 있어야 합니다.

728x90