[CS][Spring] 제어의 역전(IoC) & 의존성 주입(DI)

손경이·2024년 4월 12일
0

CS Study

목록 보기
5/25

제어의 역전(IoC: Inversion of Control) & 의존성 주입(DI: Dependency Injection)


IoC : 객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것

DI : 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식


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

  • 자바 개발의 경우 객체를 생성하고 사용하는 일련의 작업을 개발자가 제어하는 구조
    • private MyService service = new MyService
  • 스프링은 자바 개발 방식과 다르게 동작
    • IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임
    • 외부 : 스프링 컨테이너 또는 IoC 컨테이너
  • IoC를 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 등이 가능
  • 객체의 제어권을 컨테이너로 넘기기 때문에 개발자는 비스니스 로직을 작성하는 데 더 집중할 수 있음

> 의존성 주입(DI: Dependency Injection)

  • IoC 방법 중 하나
  • 스프링에서 의존성을 주입받는 방법 세가지
    • 스프링에서 @Autowired 어노테이션을 통해 의존성을 주입할 수 있음(생략 가능)

    1. 생성자를 통한 의존성 주입
      • 스프링 공식 문서에서 권장하는 의존성 주입 방법
      • 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계되어 있음
    @RestController
     public class DIController {
     	MyService myService;
      
      	@Autowired
     	public DIController(MyService myService) {
     		this.myService = myService;
     	}
     }
    1. 필드 객체 선언을 통한 의존성 주입
    @RestController
     public class DIController {
        @Autowired
     	MyService myService;
     }
    1. setter 메서드를 통한 의존성 주입
    @RestController
     public class SetterInjectionController {
     	MyService myService;
      
      	@Autowired
     	public void setMyService(MyService myService) {
     		this.myService = myService;
     	}
     }

참고

  • 책 : 스프링 부트 핵심 가이드

0개의 댓글