코드 그라데이션
의존성 주입과 제어의 역전 본문
의존성 주입 [DI(Dependency Injection)] & 제어의 역전[IoC(Inversion of Control)]
👉 IoC(Inversion of Control : 제어의 역전)
- 애플리케이션의 전체 동작 방식을 구성하기 위해 구현 객체를 생성, 연결하는 별도의 설정 클래스인 AppConfig가 있다고 하자.
- 위 그림과 같이 OrderServiceImpl은 필요한 인터페이스(DiscountPolicy)들을 AppConfig로 부터 호출하지만 어떻게 생성 될지는 알 수 없다. 메소드가 실행 됬을때 제어흐름도 AppConfig 가 들고 있던걸 실행하는것이기 때문에 프로그램의 제어 흐름에 대한 모든 권한도 AppConfig가 가지고 있다. 다쓰면 객체도 반납한다.
- 이처럼 프로그램의 제어 흐름을 OrderServiceImpl이 직접 제어하는 것이 아닌 AppConfig와 같이 외부에서 관리하는 것을 IoC(제어의 역전)이라고 한다.
✋🗃️ 컨테이너란?
- Appconfig와 같이 객체를 생성하고 관리하면서 의존 관계를 연결해 주는 것을 IoC 컨테이너 또는 DI 컨테이너라 한다. 주로 DI 컨테이너라 하지만 어셈블러, Object Factory 등으로 불리기도 한다.
🙂 일반적인 제어흐름: 사용자가 자신이 필요한 객체를 생성해서 사용
🙃 역전된 제어흐름 : 사용자가 자신이 필요한 객체(또는 사용할 객체)에 @ 으로 표시하면 컨테이너에서 꺼내서 넣어주니까 바로 사용하면됨
- 용도에 맞게 필요한 객체를 생성없이 그냥 가져다 사용
- "DI (Dependency Injection)" 한국말로 "의존성 주입"
- 사용할 객체가 어떻게 만들어졌는지는 알 필요 없음
- 사실 알아야 되긴 하지만, 사용할 객체의 수정내용을 일일이 반영하는 리소스를 아낄 수 있다는 의미)
// 기존 객체 생성
private Object object = new Object();
// 객체 주입 받기 (아래 방법 말고도 많음)
@Autowired
private Object object;
- 객체 생성 방법
- Setter Injection (수정자 주입)
- Constructor Injection (생성자 주입) - @RequiredArgsConstructor …
- Method Injection (필드 주입) - @Autowired …
728x90
'Spring > 개념 정리' 카테고리의 다른 글
JPA 동작 방식 (0) | 2023.02.05 |
---|---|
Lombok 라이브러리에서 자주 사용하는 어노테이션 (0) | 2023.01.30 |
Anotation의 종류와 지속 기간 (0) | 2023.01.17 |
스프링 Bean과 Component (0) | 2023.01.16 |
스프링부트 리다이렉트 종류 / 모듈과 모듈화 (0) | 2023.01.15 |
Comments