@self angular

agnusdei·2023년 10월 6일

@Self() 데코레이터는 Angular에서 의존성 주입(Dependency Injection)을 할 때 사용되는 데코레이터 중 하나입니다. 이 데코레이터는 주입할 서비스(provider)가 현재 컴포넌트 또는 디렉티브와 관련이 있어야 함을 나타내며, 주로 의존성 주입을 제한하거나 컴포넌트 또는 디렉티브의 범위(scope) 내에서 서비스를 찾을 때 사용됩니다. 이해를 돕기 위해 상세한 설명과 다양한 코드 예시를 제공하겠습니다.

@Self() 데코레이터의 역할:

  • @Self() 데코레이터는 Angular의 의존성 주입 시에 사용할 수 있는 데코레이터 중 하나입니다.
  • 이 데코레이터를 사용하면 Angular가 의존성을 찾을 때 현재 컴포넌트 또는 디렉티브의 범위 내에서 검색하게 됩니다.
  • 다시 말해, 해당 서비스가 현재 컴포넌트 또는 디렉티브와 연결되어 있을 때만 주입이 가능합니다.
  • 만약 해당 서비스가 현재 범위 내에서 찾을 수 없다면 주입되지 않습니다.

@Self() 데코레이터를 사용한 코드 예시:

  1. 사용자 정의 디렉티브와 함께 사용하기:
import { Directive, Self } from '@angular/core';

@Directive({
  selector: '[appCustomDirective]'
})
export class CustomDirective {
  constructor(@Self() private customDirective: CustomDirective) {
    console.log(customDirective); // 출력: CustomDirective 객체
  }
}

위 예제에서 @Self() 데코레이터는 CustomDirective 클래스의 생성자에서 CustomDirective 서비스를 주입하려고 시도합니다. 이것은 가능한 것이며 @Self() 데코레이터가 현재 디렉티브 클래스의 범위 내에서 해당 서비스를 찾습니다.

  1. 부모 컴포넌트의 서비스 주입 방지하기:
import { Component, Self } from '@angular/core';

@Component({
  selector: 'app-child-component',
  template: '<div>{{ message }}</div>'
})
export class ChildComponent {
  message = 'Child Component';

  constructor(@Self() private parentMessage: ParentMessageService) {
    // 이 코드는 작동하지 않음. 부모 컴포넌트 범위에서 찾지 못함.
    console.log(parentMessage);
  }
}

위 예제에서 @Self() 데코레이터는 ChildComponent 클래스의 생성자에서 ParentMessageService 서비스를 주입하려고 시도하지만, 부모 컴포넌트 범위에서 해당 서비스를 찾을 수 없으므로 주입되지 않습니다.

  1. 상속된 클래스에서 사용하기:
import { Injectable, Self } from '@angular/core';

@Injectable()
class BaseService {
  message = 'Base Service';
}

@Injectable()
class ChildService extends BaseService {
  constructor(@Self() private baseService: BaseService) {
    super();
    console.log(baseService); // 출력: BaseService 객체
  }
}

위 예제에서 @Self() 데코레이터는 ChildService 클래스의 생성자에서 BaseService 서비스를 주입합니다. ChildServiceBaseService를 상속하고 있으며, @Self() 데코레이터는 현재 클래스의 범위 내에서 해당 서비스를 찾아냅니다.

요약:

@Self() 데코레이터는 의존성 주입 시 현재 클래스(컴포넌트 또는 디렉티브)의 범위 내에서 서비스를 찾아내고 주입할 때 사용됩니다. 이것은 주로 현재 컴포넌트 또는 디렉티브와 관련된 서비스를 주입받을 때 유용하며, 다른 범위에서 동일한 서비스를 찾는 것을 방지하는 데 사용될 수 있습니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글