💡제어 역전(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 |