IoC, DI, AOP

정민주·2025년 7월 10일

스프링 스터디

목록 보기
17/17

오늘은 스프링 프레임워크의 가장 기본 개념인 IoC, DI, AOP에 대해 간략하게 정리해볼것이다.

1. 제어 역전(IoC)

IoC(Inversion of Control)는 프로그램의 제어 흐름을 개발자가 아니라 프레임워크나 컨테이너가 제어하도록 위임하는 설계 원칙이다.

"프로그램 제어 흐름"이란, 다음과 같다.

  • 어떤 객체가 언제 생성되는가
  • 누가 그것을 호출하는가
  • 어떤 순서로 메서드들이 실행되는가

이러한 실행 흐름의 주도권을 "프로그램 제어 흐름"이라고 한다.

1.1 일반적 자바 개발

일반적인 자바 환경에서는 프로그램 제어 흐름을 개발자가 직접 관리하게 된다.

Service service = new ServiceImpl(); 
Controller controller = new Controller(service); 
controller.doSomething(); 
  • 객체 생성 시점: new 키워드를 통해 개발자가 직접 ServiceImpl, Controller를 생성
  • 주입 시점: Controller에 Service를 수동으로 주입
  • 실행 시점: controller.doSomething()을 직접 호출함

1.2 IoC 적용 환경

IoC는 이런 프로그램의 제어 흐름을 개발자가 아닌 외부로 넘겨주는 것이다!

그 외부는 바로 스프링 컨테이너나 IoC 컨테이너를 의미한다.

@Component
public class Controller {
    @Autowired
    private Service service;

    public void doSomething() {
        service.run();
    }
}

1. 객체 생성 시점
→ Spring이 @Component가 붙은 클래스들을 스캔해서 빈(bean)으로 자동 생성함
→ 개발자가 new 하지 않아도 생성됨

2. 주입 시점
→ @Autowired를 보고 Spring이 적절한 Service 구현체를 찾아 자동 주입
→ 개발자는 어떤 구현체가 들어오는지도 몰라도 됨

3. 실행 시점
→ Spring MVC에서 요청을 받으면 자동으로 해당 Controller의 메서드를 호출
→ DispatcherServlet → HandlerMapping → Controller 흐름으로 Spring이 실행 흐름 제어


2. 의존성 주입(DI)

의존성 주입은, 객체가 의존하는 다른 객체를 직접 생성하지 않고, 외부에서 주입받도록 하는 설계 방식이다.

스프링에서 의존성 주입을 받는 경우는 총 3가지가 있다.

  • 생성자를 통한 의존성 주입
  • 필드 객체 선언을 통한 의존성 주입
  • setter 메서드를 통한 의존성 주입

0개의 댓글