inblog logo
|
Gyeongwon's blog
    Springboot

    [스프링부트 #2] IoC와 DI

    Spring의 기본이 되는 제어의 역전과 의존성 주입에 대해 학습하고 핵심 어노테이션을 공부하고 정리하였습니다.
    도경원's avatar
    도경원
    Aug 01, 2025
    [스프링부트 #2] IoC와 DI
    Contents
    1. IoC (Inversion of Control) - 제어의 역전2. 의존성 주입 (DI, Dependency Injection)3. 핵심 어노테이션 정리4. 예시 코드5. 자주 헷갈리는 질문 요약

    1. IoC (Inversion of Control) - 제어의 역전

    개념

    • 기존 방식: 개발자가 필요한 객체를 직접 new 키워드로 생성해서 사용한다.
    • IoC 방식: 객체의 생성과 생명 주기를 개발자가 아닌 프레임워크(SPRING) 가 관리한다.
    즉, "어떤 객체를 언제 만들고 누가 관리할 것인가"에 대한 제어 권한을 개발자 → 스프링 컨테이너로 위임한 것이다.
    ❗
    "역전"이라는 말은 개발자가 원래 하던 역할을 스프링이 대신 해준다는 뜻.
    IoC 컨테이너 = 객체를 생성하고 보관해두는 창고 같은 것.
    스프링 애플리케이션에서는 대부분의 객체를 IoC 컨테이너에 등록해놓고 필요할 때 꺼내 쓴다.

    2. 의존성 주입 (DI, Dependency Injection)

    개념

    • 어떤 객체가 필요한 의존 객체(=다른 객체)를 스스로 만들지 않고, 스프링이 대신 넣어주는 것.
    • 예: OrderService가 OrderRepository를 필요로 하면, 직접 new OrderRepository() 하는 게 아니라, 스프링이 OrderRepository를 생성해서 OrderService에 넣어준다.

    종류

    1. 생성자 주입 → 가장 권장됨, 생성자에 매개변수 적기만 하면 주입이 됨.
    1. 필드 주입 (지양하는 편)
    1. Setter 주입

    3. 핵심 어노테이션 정리

    어노테이션
    역할
    @Component
    클래스 객체를 스프링 컨테이너에 등록
    @Service, @Repository, @Controller
    @Component의 특수화. 역할을 구분하기 위한 것
    @Autowired
    DI 수행 (필드, 생성자, setter 가능)
    @Configuration
    설정 클래스를 명시
    @Bean
    개발자가 직접 객체를 생성해서 등록하고 싶을 때 사용

    4. 예시 코드

    @Component + 생성자 주입

    @Component public class OrderRepository { public void save() { System.out.println("Order Saved!"); } }
    @Component public class OrderService { private final OrderRepository orderRepository; // 생성자에 매개변수만 적으면 Spring이 알아서 주입해줌 public OrderService(OrderRepository orderRepository) { this.orderRepository = orderRepository; } public void order() { orderRepository.save(); } }

    실행 예 (스프링 부트 기준)

    @SpringBootApplication public class App { public static void main(String[] args) { ApplicationContext context = SpringApplication.run(App.class, args); OrderService orderService = context.getBean(OrderService.class); orderService.order(); // Order Saved! } }

    5. 자주 헷갈리는 질문 요약

     
    질문
    답변
    IoC 컨테이너는 몇 개만 띄울 수 있어?
    보통 1개지만, 특별한 경우 여러 개 만들 수도 있음. 단, 애플리케이션 실행 시 대부분 하나의 ApplicationContext만 쓴다.
    객체가 자동으로 new 되는 조건은?
    @Component, @Service, @Repository, @Controller 중 하나를 붙여야 함
    new 여러 개 띄워야 하는 경우는?
    동적으로 객체를 만들거나 수동으로 관리해야 할 경우. 이때는 @Bean 등을 활용하거나 직접 new 한다.
    Share article
    Contents
    1. IoC (Inversion of Control) - 제어의 역전2. 의존성 주입 (DI, Dependency Injection)3. 핵심 어노테이션 정리4. 예시 코드5. 자주 헷갈리는 질문 요약

    Gyeongwon's blog

    RSS·Powered by Inblog