Angular 의존성 주입 컨텍스트 이해
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 대상: Angular 개발자 (중급 이상)
- 난이도: 중급 (의존성 주입 메커니즘 이해 필요)
핵심 요약
- 의존성 주입 컨텍스트는 Angular가 의존성을 해결할 수 있는 범위를 정의합니다.
inject()
메서드를 사용하여 생성자 외부에서도 의존성을 주입할 수 있습니다.- 서비스, 컴포넌트, 팩토리 함수 내에서 주입 컨텍스트가 사용 가능하며, 계층 구조에 따라 주입 범위가 결정됩니다.
섹션별 세부 요약
1. **의존성 주입 컨텍스트 정의**
- Angular는 컴포넌트, 디렉티브, 서비스가 의존성을 요청할 때 런타임 환경에서 해당 인스턴스를 결정합니다.
- 주입 컨텍스트는 의존성 해결의 범위와 계층 구조를 관리합니다.
2. **inject() 메서드 사용법**
- 기존 방식: 생성자에 의존성을 주입 (
constructor(private http: HttpClient){}
) - 최신 방식:
const http = inject(HttpClient);
으로 생성자 외부에서도 주입 가능 @Injectable(providedIn: 'root')
로 서비스를 전역 범위에 등록할 수 있습니다.
3. **의존성 주입 컨텍스트의 중요성**
- 서비스가 필요한 위치에서 정확한 계층(컴포넌트/루트)에 맞는 주입이 이루어져야 함
- 서비스가 없을 경우 부모 인젝터를 탐색하며, 없을 경우 에러 발생
providers
배열에서 서비스를 명시적으로 등록해야 할 경우도 있음
4. **주입 컨텍스트의 사용 범위**
- 컴포넌트, 서비스, 디렉티브의 생성자 내부에서 사용 가능
- 팩토리 함수에서도 사용 가능:
```ts
useFactory: () => {
const httpClient = inject(HttpClient); // 주입 컨텍스트 사용
return new ClassName(httpClient);
}
```
5. **자동 제공 컨텍스트 외부에서 inject() 사용**
runInjectionContext()
메서드를 사용하여 자동 제공 범위 외부에서도 주입 가능- 예시:
```ts
runInjectionContext(this.injector, () => {
const myService = inject(MyService); // 외부 컨텍스트에서 주입
});
```
결론
- 의존성 주입 컨텍스트는 Angular 애플리케이션의 의존성 해결 핵심 요소로, 서비스 범위와 계층 구조를 명확히 정의해야 합니다.
inject()
메서드와runInjectionContext()
를 활용하여 유연한 주입 방식을 구현하는 것이 중요합니다.