본문 바로가기
Spring/관련 지식

IoC/DI, 스프링 컨테이너와 Bean의 개념

by 정구정구 2026. 7. 7.

IoC (Inversion of Control) (제어의 역전) 란?

객체의 생성과 관리를 개발자가 하는 것이라 아니라 프레임워크가 대신하는 것

// 일반 코드
public class A {
    b = new B(); // 개발자가 클래스를 직접 생성, 제어
}


// 제어의 역전
public class A {
    private B b; // 코드에서 객체를 생성하지 않음, 어디선가 받아온 객체를 b에 할당
}

 

스프링은 제어의 역전을 중요한 컨셉으로 삼고 있으며, 객체를 생성하고 제어하는 주체를 스프링 컨테이너 라고 한다.

 

 

DI (Dependency Injection) (의존성 주입) 란?

외부에서 객체를 주입받아 사용하는 것

 

의존성 주입에 대해서는 이미 다룬적이 있다.

( 참고 : https://record47584.tistory.com/41 )

 

의존성 주입(Dependency Injection)과 조립자

의존성(Dependency)이란?어떤 객체가 자신의 기능을 수행하기 위해 필요로 하는 외부 요소 한 객체가 다른 객체를 사용할 때, 의존성이 있다고 한다. public class OrderService { private Rider rider = new Rider();

record47584.tistory.com

 

스프링에서 의존성 주입의 의미는 간단하다. 클래스에 대한 의존성을 스프링 컨테이너에서 주입받고 있다는 의미이다.

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

 

 

스프링 컨테이너(Spring Container)란?

IoC에서 객체를 생성하고 관리하는 주체

 

스프링 컨테이너에서 관리하는 객체를 Bean이라고 한다.

  • Bean이 생성되고 소멸하기까지의 생명주기를 관리
  • 개발자가 @Autowired 같은 어노테이션을 사용해 Bean을 주입받을 수 있게 DI 지원

 

 

Bean이란?

빈은 스프링 컨테이너가 생성하고 관리하는 객체

  • 클래스에 @Component 어노테이션을 붙이면 Bean으로 등록되어 스프링컨테이너에서 관리됨
  • 클래스의 첫 글자를 소문자로 바꿔서 관리
  • 기본적으로 싱글톤으로 관리
@Component
public class MyClass {
}

// -> myClass라는 이름으로 Bean으로 등록되어 관리됨