IoC, DI, 컨테이너, 빈

nahy·2024년 7월 17일

Spring

목록 보기
1/6

스프링의 컨셉

  • 스프링은 자바 언어 기반의 프레임워크
    • 자바 언어의 가장 큰 특징 - 객체 지향 언어
  • 스프링은 객체 지향 언어가 가진 강력한 특성을 살려내는 프레임워크
  • 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크

-> 객체 지향의 장점을 살리기 위해 IoC, DI, 스프링 빈, 컨테이너라는 개념이 필요하다.

IoC (Inversion of Control) : 제어의 역전

객체지향 프로그래밍에서 제어할 것은? → 객체

제어의 역전이란 객체를 제어할 제어권을 스프링에게 넘겨주는 것이다.

public static void main(String[] args){
	Galaxy galaxy23 = new Galaxy(); //개발자가 객체의 생성, 호출을 관리
}

스프링이 없을 때는 개발자가 직접 객체의 생성, 호출 등을 관리해야 한다.
객체를 스프링 빈으로 등록하면 스프링에서 프로그램이 실행하는 동안 해당 객체를 관리해 준다.

DI (Dependency Injection) : 의존성 주입

IoC를 구현하기 위해 DI가 필요하다.

IoC 원칙을 지키기 위해서는 스프링에게 제어권을 넘겨야 한다.
스프링에서 객체를 제어한다고 했으니, 객체를 사용하고 싶을 때는 개발자가 객체를 만드는 것이 아니라 스프링에게 객체를 주입받아야 한다.
-> 이게 바로 DI의 개념이다.

  • 의존한다 = 사용한다
  • 객체를 사용한다 = 객체의 메소드, 필드를 사용한다

DI 방법 3가지

  • 필드로 주입
  • setter로 주입
  • 생성자로 주입
    • 현재 가장 많이 쓰이는 방법

필드 주입, setter 주입은 지양되고 있다.
이 이유에 대해서는 다른 포스팅에서 다루려고 한다.

스프링 빈

쉽게 말해 사실 스프링이 생성하고 관리하는 객체이다.

IoC/DI/스프링 컨테이너

스프링 빈은 스프링이 관리하는 객체이다.
빈들을 관리하면 이것들을 저장할 저장소가 필요하지 않을까?

이게 바로 컨테이너이다.

스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다.

profile
ggg...

0개의 댓글