🤿백엔드 내실 채우기

[Spring] 스프링 IoC(Inversion of Control Container)와 빈

2024. 12. 1. 09:06
목차
  1. 1. IoC(Inversion of Control Container)란? 
  2. IoC 사용하지 않은 경우
  3. IoC를 사용한 경우
  4. 2.  IoC 컨테이너란?
  5. IoC 컨테이너 주요 구현체
  6. 3. 스프링 빈(Spring Bean)이란?
  7. 빈 생명주기 (Lifecycle)
  8. 싱글톤과 스프링 빈
반응형

 

안녕하세요. 오늘은 스프링 IoC 컨테이너와 빈 싱글톤에 대해 알아보겠습니다.

 

1. IoC(Inversion of Control Container)란? 

제어의 역전이라는 개념으로, 전통적인 프로그래밍에서 객체의 생성과 관리 및 책임을 개발자가 직접 담당하는 방식에서 벗어나, 제어의 흐름을 프레임워크나 외부 시스템에 맡기는 방식입니다. 

 

IoC 사용하지 않은 경우

public class Car {
	
    private Engine engine;
    
    public Car() {
    	this.engine = new Engine(); // 직접 주입
    }
    
    public void drive() {
    	entine.run();
    }
}

public class Engine {
	public void run() {
    	System.out.println("Engine running...");
    }
}

 

IoC를 사용한 경우

@Component
public class Car {
	
    private Engine engine;
    
    @Autowired
    public Car(Engine engine) { // 의존성 주입
    	this.engine = engine
    }
    
    public void drive() {
    	entine.run();
    }
}

@Component
public class Engine {
	public void run() {
    	System.out.println("Engine running...");
    }
}

 

 

2.  IoC 컨테이너란?

스프링에서 객체(빈)를 관리하고 생성, 초기화, 의존성 주입, 소멸 등을 담당하는 핵심 역할을 합니다.

  1. 객체 생성 : 스프링 애플리케이션에 필요한 객체(스프링 빈)을 생성
  2. 의존성 주입 (DI) : @Autowired, XML, Java Config 등으로 의존성 주입
  3. 빈의 생명주기 관리 : 초기화, 소멸 등 라이프사이클 관리
  4. 빈 검색 : ApplicationContext 또는 BeanFactory를 통해 빈 조회

 

IoC 컨테이너 주요 구현체

BeanFactory

가장 기본적인 IoC 컨테이너로 지연 초기화를 지원하여 경량 애플리케이션에 적합합니다.

※지원 초기화 : BeanFactory는 빈이 요청될 때만 빈을 초기화

 

ApplicationContext

BeanFactory를 확장한 IoC 컨테이너로 국제화, 이벤트, AOP, 애플리케이션 라이프사이클 관리 등 추가 기능을 제공하며 실제 개발에서 주로 사용됩니다. 

※ 즉시 초기화 : 컨테이너가 초기화될 때 모든 싱글톤 빈을 생성하여 초기 오류를 조기에 발견 가능

 

3. 스프링 빈(Spring Bean)이란?

IoC 컨테이너에 의해 관리되는 객체로 @Component, @Service, @Repository, @Controller와 같은 어노테이션을 사용하거나, @Bean 메서드로 정의 가능합니다. 

 

스프링 빈은 기본적으로 싱글톤 스코프를 가집니다.

※  싱글톤 스코프 : 하나의 컨테이너 내의 동일한 빈 인스턴스를 공유

 

빈 생명주기 (Lifecycle)

생성 : 빈은 애플리케이션 시작 시 IoC 컨테이너에 의해 생성됩니다.

초기화 : 빈이 생성된 후, 필요한 의존성을 주입받고, @PostConstruct 또는 init-method로 초기화 작업을 합니다.

사용 : 빈은 애플리케이션에서 사용됩니다.

소멸 : 애플리케이션 종료 시, @PreDestroy나 destroy-method로 자원 정리 후 빈이 소멸됩니다. 

 

@Component
public class Car {
    private final Engine engine;

    @Autowired
    public Car(Engine engine) {
        this.engine = engine;
    }

    @PostConstruct // 빈 초기화 시 호출
    public void init() {
        System.out.println("Car is ready to drive!");
    }

    @PreDestroy // 빈 소멸 시 호출
    public void cleanup() {
        System.out.println("Cleaning up car...");
    }

    public void drive() {
        engine.run();
    }
}

 

싱글톤과 스프링 빈

스프링이 빈을 기본적으로 싱글톤으로 관리하는 이유

  1. 메모리 효율성 : 하나의 인스턴스를 공유함으로써 자원 상용량 절약
  2. 성능 :  빈을 매번 생성하는 오버헤드 제거 (빈 생성 시간이 오래 걸림)

스프링 컨테이너가 내부에 싱글톤 레지스트리를 두고, 빈의 인스턴스를 저장 및 관리합니다. 

 

빈의 스코프를 싱글톤이 아닌 다른 범위로 변경할 수 있습니다.

  • 프로토타입 : 요청 시마다 새로운 인스턴스를 생성
  • 세션 : HTTP 세션당 하나의 인스턴스가 생성
  • 리퀘스트 : HTTP 요청당 하나의 인스턴스가 생성
@Component
@Scope("prototype")  // 프로토타입 범위
public class Engine {
    public void run() {
        System.out.println("Engine running...");
    }
}
반응형
저작자표시 (새창열림)

'🤿백엔드 내실 채우기' 카테고리의 다른 글

[Spring] 스프링 3대 요소 - DI, AOP, PSA 정리  (0) 2024.11.30
[Spring] Spring MVC 작동 방식 - DispatcherServlet은 어떤 역할을 하는가?  (1) 2023.10.24
  1. 1. IoC(Inversion of Control Container)란? 
  2. IoC 사용하지 않은 경우
  3. IoC를 사용한 경우
  4. 2.  IoC 컨테이너란?
  5. IoC 컨테이너 주요 구현체
  6. 3. 스프링 빈(Spring Bean)이란?
  7. 빈 생명주기 (Lifecycle)
  8. 싱글톤과 스프링 빈
'🤿백엔드 내실 채우기' 카테고리의 다른 글
  • [Spring] 스프링 3대 요소 - DI, AOP, PSA 정리
  • [Spring] Spring MVC 작동 방식 - DispatcherServlet은 어떤 역할을 하는가?
pkyung
pkyung
성장하는 중pkyung 님의 블로그입니다.
pkyung
성장하는 중
pkyung
전체
오늘
어제
  • 분류 전체보기
    • 🏆토이 프로젝트에서 생긴 일
    • 🤿백엔드 내실 채우기
    • 🍫카카오 테크 캠퍼스 2기 BE
    • 🍀spring
      • 스프링 입문
      • 스프링 핵심원리 기본
      • 스프링 jpa
      • 🐛debug
    • 🔒보안
    • 🌎infra
      • docker
      • kubernetes
      • cloud
    • 🌐web
      • HTTP 웹 기본 지식
    • 🔑알고리즘
      • baekjoon
      • programming language
    • 🎞️프로젝트
      • android
      • flutter
    • 📚수업
      • 교양과목
    • 💾database
    • ⚙settings
    • 2023 여름 모각코 - 절개와지조
    • 2024 겨울 모각코 - 내 장점은 algorit..

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • JPA
  • 자바
  • Docker
  • HTTP
  • 스프링부트
  • python
  • spring
  • 객체지향
  • 스택
  • 파이썬
  • 소수
  • 스프링
  • springboot
  • 스프링기본
  • nginx
  • 카테캠
  • be
  • Java
  • 문자열
  • 김영한
  • Security
  • sql
  • 카카오테크캠퍼스
  • mysql
  • 객체지향의사실과오해
  • BFS
  • 데이터베이스
  • 코드리뷰
  • 자바문자열
  • 백준

최근 댓글

최근 글

hELLO · Designed By 정상우.
pkyung
[Spring] 스프링 IoC(Inversion of Control Container)와 빈
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.