이 영역을 누르면 첫 페이지로 이동
hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

페이지 맨 위로 올라가기

hoonDEV

Angular 의존성 주입 - (2) 프로바이더 (Provider)

  • 2020.07.07 11:37
  • 공부/Angular

프로바이더 (Provider)

Angular는 서비스의 인스턴스 생성과 구성요소에 그 서비스를 주입하는 권한을 위임 받았다. 그러나, Angular는 인스턴스를 어떻게 생성하는지 모르므로 이를 알려줘야 한다. 그 역할을 프로바이더가 한다.

따라서 프로바이더는 Angular에 의존성 인스턴스의 생성 정보를 알린다.

프로바이더 사용 방법

@Injectable의 provideIn 프로퍼티

// 루트 인젝터에 제공
@Injectable({
    providedIn: 'root',
})

// 특정 모듈에 등록
// 그 모듈의 **모든 구성요소에서 주입할 수 있음.**
@Injectable({
    providedIn: YourModule,
})

@Component 메타데이터의 providers 프로퍼티

    // 해당 컴포넌트와 하위 컴포넌트에 주입할 수 있음.
@Component({
    ...
    providers: [TempService]
})

@NgModule 메타데이터의 providers 프로퍼티

// 그 모듈의 **모든 구성요소에서 주입할 수 있음.**
@NgModule({
    ...
    providers: [TempService]
})

프로바이더의 종류

  • 클래스 프로바이더 : 앞에서 설명했으므로 생략
  • 값 프로바이더
  • 팩토리 프로바이더

값 프로바이더

주입 대상의 타입이 클래스가 아닌 문자열, 숫자, 불리언 타입일 경우

providers: [
    {
        provide: 'API',
        useValue: 'https://api.myserver.com/get'
        // provide 토큰을 클래스로 지정할 수 없으므로 문자열로 한다.
    }
]

~

constructor(
    // 문자열은 타입 추론이 안되므로 @Inject 데코레이터를 사용한다.
    @Inject('API') private api: string
)

팩토리 프로바이더

의존성 인스턴스를 생성할 때 어떠한 로직을 거쳐야 할 때, 팩토리 함수를 통해 로직을 처리하고 인스턴스를 생성한다.

~~.service.provider.ts를 만들어서 팩토리 프로바이더와 팩토리 함수를 정의한다. 아래 예시를 보자.

import { TestService } from './test-service-1';
import { MockTestService } from './test-service-2';

// Factory Function
const factoryFunc = (param) => param ? new TestService : new MockTestService;

// Factory Provider
export const TestServiceProvider = {
    provide: TestService, 
    use**Factory**: factoryFunc, // 팩토리 함수 등록
    deps: ['param']
};

// Provider that injects value to factory function
export const SetParamProvider = {
    provide: 'param',
    useValue: false
}

~

// Component
@Component({
    ...
    providers: [
        TestServiceProvider,
        SetParamProvider
    ]
})
  • provide : 최종적으로 생성될 인스턴스 Type
  • useFactory : 사용할 팩토리 함수
  • deps : 팩토리 함수에 주입할 의존성 토큰 배열

'공부 > Angular' 카테고리의 다른 글

Angular에서 Tailwind CSS 사용해보기  (0) 2020.07.14
Angular 의존성 주입 - (4) 선택적 의존성 주입  (0) 2020.07.07
Angular 서비스 주입 - (3) 인젝션 토큰  (0) 2020.07.07
Angular 의존성 주입 - (1) 서비스  (0) 2020.07.07

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • Angular에서 Tailwind CSS 사용해보기

    Angular에서 Tailwind CSS 사용해보기

    2020.07.14
  • Angular 의존성 주입 - (4) 선택적 의존성 주입

    Angular 의존성 주입 - (4) 선택적 의존성 주입

    2020.07.07
  • Angular 서비스 주입 - (3) 인젝션 토큰

    Angular 서비스 주입 - (3) 인젝션 토큰

    2020.07.07
  • Angular 의존성 주입 - (1) 서비스

    Angular 의존성 주입 - (1) 서비스

    2020.07.07
다른 글 더 둘러보기

정보

hoonDEV 블로그의 첫 페이지로 이동

hoonDEV

  • hoonDEV의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그

카테고리

  • 분류 전체보기 (91)
    • 일상 (13)
      • 후기 (1)
      • 계획 (11)
    • 공지사항 (1)
    • 알고리즘 (54)
      • 문제풀이 (53)
      • 이론 (1)
    • 공부 (19)
      • React (0)
      • Angular (5)
      • Java (3)
      • C, C++ (3)
      • JavaScript (6)
      • WEB (2)
    • 디자인 (1)
      • UI, UX (1)
    • 개발 (0)
      • boom (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 알고리즘
  • dp
  • javascript
  • 그리디
  • es6
  • 문제풀이
  • 이분탐색
  • 백준

나의 외부 링크

정보

훈개발자의 hoonDEV

hoonDEV

훈개발자

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © 훈개발자. Designed by Fraccino.

티스토리툴바