[Spring]스프링 주요원리 DI? IOC? 를 쉽게 생각해보기

Gaeng·2025년 4월 21일

[Spring] 공부

목록 보기
20/21
post-thumbnail

스프링의 4가지 개념을 쉽게 이해해보자.

KEYWORD : [IoC], [Cotainnner], [Bean], [DI]

스프링이 없던 시절, 개발자들의 불편함

과거에는 객체 지향 프로그래밍(OOP)을 하더라도 객체의 생성, 조립, 생명주기 관리를 개발자가 직접 처리해야 했습니다.

즉, 필요한 객체를 직접 new로 생성하고, 서로 연결(의존성 주입)하며, 객체의 생성/소멸 시점도 직접 관리했습니다.

이 과정은 코드가 복잡해지고, 객체 간 결합도가 높아져 유지보수가 어려웠습니다.

스프링의 등장과 IoC(제어의 역전)

IoC(Inversion of Control, 제어의 역전)
기존에는 개발자가 직접 객체의 생성과 의존성 연결을 제어했지만,
이제는 스프링 프레임워크가 객체 생성과 의존성 주입, 생명주기 관리를 대신 맡는 원칙

  • 개발자는 객체가 필요하다고 직접 생성하지 않고,
    스프링에게 "이런 객체가 필요하다"고 선언만 하면
    스프링이 알아서 객체를 만들고, 필요한 의존성을 연결해줍니다.

IoC를 구현하는 Container(컨테이너)

스프링이 객체를 관리하려면, 객체들을 모아두고 관리하는 공간이 필요합니다.
이 역할을 하는 것이 바로 IoC Container(컨테이너)

  • IoC 컨테이너는 객체(Bean)의 생성, 초기화, 의존성 주입, 소멸 등 생명주기를 관리합니다.
  • 대표적인 컨테이너로는 BeanFactoryApplicationContext가 있습니다.

컨테이너가 관리하는 객체: Bean(빈)

컨테이너가 관리하는 객체를 Bean(빈)

  • Bean은 스프링 컨테이너가 생성하고, 조립(의존성 연결)하며, 생명주기를 관리하는 애플리케이션의 핵심 객체입니다.
  • 개발자는 Bean으로 등록할 클래스에 어노테이션(@Component, @Service 등)이나 설정을 추가하면 됩니다.

의존성 주입(DI, Dependency Injection)

DI(Dependency Injection, 의존성 주입)
스프링 컨테이너가 Bean 간의 의존성을 자동으로 연결

  • 예를 들어, A 객체가 B 객체를 필요로 할 때,
    개발자가 직접 B를 생성해 A에 넣는 것이 아니라,
    스프링이 B를 미리 만들어두고 A에 주입해줍니다.
  • DI 방식에는 생성자 주입, 세터 주입, 필드 주입 등이 있습니다.

용어설명
IoC(제어의 역전)객체 생성/관리를 개발자가 아닌 프레임워크(스프링)가 담당하는 원칙
ContainerBean을 생성·관리·조립하는 스프링의 핵심 공간(BeanFactory, ApplicationContext)
Bean컨테이너가 관리하는 객체(스프링이 생성, 조립, 관리하는 애플리케이션 구성요소)
DI(의존성 주입)컨테이너가 Bean 간의 의존성을 자동으로 연결해주는 방식


참고자료 : 인강들으면서 내용 정리 및 추가 정리

옆집 개발자와 같이 진짜 이해하며 만들어보는 첫 Spring Boot 프로젝트

profile
문제를 해결하면서 나온 문제를 기록하는 노트

0개의 댓글