개념 스터디

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

💡제어 역전(IoC)


스프링 프레임워크 없이 개발할 때는 객체의 생성, 설정, 초기화, 메소드 호출, 소멸 등 객체의 생명 주기 관리를 개발자가 직접 관리하지만 스프링 프레임워크를 사용하면 객체의 생명 주기를 스프링 컨테이너, IoC 컨테이너에 위임할 수 있다.


이렇듯 객체의 관리를 개발자가 직접 하지 않고 컨테이너에 맡겨서 외부로 제어권을 위임한 것을 제어 역전이라고 부른다

객체의 생명 주기를 프레임워크에 위임하면 외부 라이브러리가 프로그래머가 작성한 코드를 호출하고 흐름을 제어할 수 있게 된다. 이렇게 되면 개발자는 비즈니스 로직을 작성하는 데에 더 집중 할 수 있다.

💡의존성 주입(DI)


의존성 주입이란 제어 역전의 방법 중 하나로, 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미한다

스프링에서는 @Autowired라는 어노테이션을 통해 의존성을 주입할 수 있다.

💡의존성을 주입받는 방법 3가지

1. 생성자를 통한 의존성 주입

@RestController
public class HY{

	MyService myService;
    
    @Autowired
    public HY(MyService myService){
    	this.myService = myService;
    }
}


2. 필드 객체 선언을 통한 의존성 주입

@RestController
public class HY{

    @Autowired
    private MyService myService;
}


3. setter 메서드를 통한 의존성 주입

@RestController
public class HY{

	MyService myService;
    
    @Autowired
    public void setMyService(MyService myService){
    	this.myService = myService;
    }
}

 

 

스프링 공식 문서에서 권장하는 의존성 주입 방법은 생성자를 통해 의존성을 주입하는 방식이다.
다른 방식과는 다르게 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 떄문이다.

 

참고

도서-스프링부트 핵심 가이드
제어의 역전 (Inversion Of Control, IoC) (hudi.blog)

'개념 스터디' 카테고리의 다른 글

레이어드 아키텍처  (0) 2024.01.14
관점 지향 프로그래밍(Aspect Oriented Programming, AOP)  (1) 2024.01.14
[개념스터디] 4주차  (0) 2021.08.25
[개념 스터디] 3주차  (0) 2021.08.17
[개념 스터디] 2주차  (0) 2021.08.08