[Angular] DI 수명(lifetime)

Transient

Transient 서비스는 주입될 때마다 생성됩니다. 즉, 컴포넌트(component)가 서비스를 주입할 때마다 서비스의 새 인스턴스가 생성됩니다. Transient 서비스의 예는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { Injectable } from '@angular/core';

@Injectable()
export class TransientService {
private data: number;

constructor() {
this.data = Math.random();
}

getData() {
return this.data;
}
}

컴포넌트가 TransientService를 주입하면 매번 서비스의 새 인스턴스가 생성됩니다.

Scoped

Scoped 서비스는 Angular 모듈당 한 번 생성됩니다. 이는 동일한 모듈 내의 컴포넌트(component)가 서비스를 주입할 때마다 동일한 서비스 인스턴스가 사용됨을 의미합니다. Scoped 서비스의 예는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { Injectable } from '@angular/core';

@Injectable({
providedIn: 'my-module',
})
export class ScopedService {
private data: number;

constructor() {
this.data = Math.random();
}

getData() {
return this.data;
}
}

동일한 모듈 내의 컴포넌트가 ScopedService를 주입하면 동일한 서비스 인스턴스가 사용됩니다.

Singleton

Singleton 서비스는 한 번 생성되고 동일한 인스턴스가 애플리케이션 전체에서 사용됩니다. 다음은 Singleton 서비스의 예입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import { Injectable } from '@angular/core';

@Injectable({
providedIn: 'root',
})
export class SingletonService {
private data: number;

constructor() {
this.data = Math.random();
}

getData() {
return this.data;
}
}

컴포넌트가 SingletonService를 주입하면 애플리케이션 전체에서 동일한 서비스 인스턴스가 사용됩니다.

Share