Spring_07_IOC·DI

OngTK·2025년 9월 14일

Spring

목록 보기
7/25

🧭 IOC · Inversion Of Control (제어의 역전)

1) 정의

  • 객체의 생성 및 생명주기 관리를 개발자가 아닌 스프링 컨테이너가 담당하는 개념
  • 컨테이너: 스프링에서 객체를 생성하고 관리하는 IOC의 핵심 구성 요소

2) 목적

  • 객체 생성과 의존성 관리의 일관성 확보
  • 객체 간 결합도 감소유지보수성 향상
  • 협업 시 중복 객체 생성, 충돌 방지

3) 주요 Annotation

  • @Component : 클래스 정보를 스프링 컨테이너에 등록하여 Bean으로 관리

@Component를 포함하는 주요 어노테이션

  • @Controller : 웹 요청 처리용 컨트롤러 등록
  • @RestController : REST API 전용 컨트롤러 등록 (@Controller + @ResponseBody)
  • @Service : 비즈니스 로직 처리용 서비스 클래스 등록
  • @Repository : DAO 클래스 등록 (예외 변환 기능 포함)
  • @Configuration : 설정 클래스 등록 (Java 기반 설정)

📌 스프링 MVC 패턴은 IOC 기반으로 동작하며, @Component 계열 어노테이션은 Bean 등록의 핵심


🔗 DI · Dependency Injection (의존성 주입)

1) 정의

  • 객체 간의 의존 관계를 직접 생성하지 않고, 스프링 컨테이너가 주입해주는 방식

2) 목적

  • 객체 간 결합도 감소
  • 유지보수성 및 테스트 용이성 향상
  • 코드 재사용성 증가

3) 주요 Annotation

  • @Autowired : 스프링 컨테이너에 등록된 Bean을 자동으로 주입

사용 방식 예시

// 멤버변수 방식 (비추천 - 테스트 어려움)
@Autowired
private 클래스명 변수명;

// 생성자 방식 (권장 방식)
private final 클래스명 변수명;

@Autowired
public 클래스명(클래스명 매개변수명) {
    this.변수명 = 매개변수명;
}

// Setter 방식
@Autowired
public void set변수명(클래스명 매개변수명) {
    this.변수명 = 매개변수명;
}

✅ 생성자 주입이 가장 권장됨 (불변성 보장, 테스트 용이)
✅ @Autowired는 생략 가능 (스프링 4.3+부터 생성자 1개일 경우 자동 주입)
⚠️ DTO, VO, Entity는 컨테이너가 관리하지 않으므로 DI 대상이 아님

profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글