📚 토비의 스프링 3.1 vol.1 111pg ~ 128pg
📚 계속 수정될 예정
📍들어가기 전에
제어의 역전(IoC)과 의존 관계 주입
- 스프링을 IoC 컨테이너라고만 해서는 스프링이 제공하는 기능의 특징을 명확하게 설명하지 못함
- 의도가 좀 더 명확한 의존 관계 주입(Dependency Injection) 용어 사용
- 스프링이 컨테이너 이며 프레임 워크이기에 기본적인 동작 원리가 모두 IoC 방식이라고 할 수 있음
- 스프링이 다른 프레임워크와 차별화 할 때에는 의존 관계 주입 컨테이너(DI 컨테이너)라고 하는 것이 더 분명하게 드러남
📍 의존 관계 주입
의존 관계 주입
- Dependency Injection
- 오브젝트 레퍼런스를 외부로부터 제공(주입) 받고 이를 통해 다른 오브젝트와 다이나믹하게 의존관계가 만들어 지는 것
- 구체적인 의존 오브젝트와 그것을 사용할 주체(보통 클라이언트라 부르는 오브젝트)를 연결해주는 작업
의존 관계 조건
- 클래스의 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않음, 그러기 위해서는 인터페이스에만 의존해야 함
- 런타임 시점의 의존관계는 컨테어너나 다른 팩토리 같은 제 3의 존재가 결정
- 의존 관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 주입해 줌으로써 만들어 짐
📁 DI는 자신이 사용할 오브젝트에 대한 선택과 생성 제어권을 외부로 넘기고 자신은 수동적으로 주입받은 오브젝트를 사용, 이는 IoC 개념에 일치
📍 의존 관계 검색
의존 관계 검색
- Dependency Lookup
- 구체적인 클래스에 의존하지 않고, 런타임 시에 의존관계 결정 (의존관계 주입과 비슷한 점)
- 스스로 검색을 이용하여 의존 관계를 맺음
- 자신이 필요로 하는 의존 오브젝트를 능동적으로 찾음
- IoC라고 할 수는 없음
📁 런타임 시 의존관계를 맺을 오브젝트를 결정하는 것과 오브젝트의 생성 작업은 외보 컨테이너에 IoC로 맡기지만, 가져올 때에는 스스로 컨테이너에게 요청하는 방법 사용
📍 메서드를 이용한 의존 관계 주입
1️⃣ 수정자 메서드를 이용한 주입
- 수정자 메서드(setter)는 외부에서 오브젝트 내부의 애트리뷰트 값을 변경하는 용도로 주로 사용
- 파라미터로 전달된 값을 보통 내부의 인스턴스 변수에 저장하는 것
- 부가적으로 입력 값에 대한 검증 등을 수행할 수 도 있음
- 외부로부터 제공받은 오브젝트 레퍼런스를 저장하였다가 내부의 메서드에서 사용하게 하는 DI 방식에서 활용이 적당
2️⃣ 일반 메서드를 이용한 주입
- 수정자 메서드처럼 set으로 시작해야 함
- 여러개의 파라미터를 받을 수 있음
'스터디 > 토비의 스프링' 카테고리의 다른 글
[토비의 스프링] 싱글톤 레지스트리, 빈 스코프 (0) | 2023.02.01 |
---|
댓글