[Angular] 컴포넌트 데코레이터(Component Decorator) 사용 방법

Angular에서 @Component 데코레이터는 재사용 가능한 UI 컴포넌트(Component)를 구축하는 초석입니다. Angular 애플리케이션 내에서 컴포넌트를 처리하고, 인스턴스화하고, 사용하는 방법을 정의하는 메타데이터를 제공합니다.

이 글에서는 @Component 데코레이터를 심층적으로 살펴보고, 다양한 속성에 대해 논의하고, 이러한 속성을 사용하여 코드 복잡성을 관리하는 방법을 설명합니다.

기본 사항

@Component 데코레이터는 구성 개체를 인수로 사용하는 함수입니다. 메타데이터를 컴포넌트 클래스와 연결하는 데 사용되므로 Angular가 컴포넌트를 생성하고 렌더링 하는 방법을 이해할 수 있습니다.

@Component 데코레이터를 사용하는 간단한 예는 다음과 같습니다.

1
2
3
4
5
6
7
8
9
10
import { Component } from '@angular/core';

@Component({
selector: 'app-example',
templateUrl: './example.component.html',
styleUrls: ['./example.component.scss'],
})
export class ExampleComponent {
// Component logic
}

속성

@Component 데코레이터는 컴포넌트의 다양한 측면을 정의하는 다양한 속성을 허용합니다. 가장 일반적으로 사용되는 속성 중 일부를 살펴보겠습니다.

  • selector: 템플릿에서 이 컴포넌트를 식별하는 CSS 선택자(selector)입니다. Angular는 템플릿에서 해당 선택자를 찾을 때마다 컴포넌트의 인스턴스를 생성하고 삽입합니다.
  • templateUrl: 컴포넌트의 템플릿이 포함된 외부 HTML 파일의 URL입니다.
  • template: 컴포넌트의 인라인 HTML 템플릿입니다. templateUrl 또는 template 중 하나를 사용할 수 있지만 둘 다 사용할 수는 없습니다.
  • styleUrls: 컴포넌트의 템플릿에 적용할 외부 CSS 파일의 배열입니다.
  • styles: 컴포넌트의 템플릿에 적용할 인라인 CSS 스타일의 배열입니다. styleUrls 또는 styles 중 하나를 사용할 수 있지만 둘 다 사용할 수는 없습니다.
  • providers: 이 컴포넌트와 해당 하위 컴포넌트에 대한 종속성 주입 공급자의 배열입니다.
  • encapsulation: 컴포넌트의 템플릿에 스타일이 적용되는 방식을 결정하는 속성입니다. ViewEncapsulation.None, ViewEncapsulation.Emulated 또는 ViewEncapsulation.ShadowDom으로 설정할 수 있습니다.
  • changeDetection: 컴포넌트의 변경 감지 전략을 결정하는 속성입니다. ChangeDetectionStrategy.Default 또는 ChangeDetectionStrategy.OnPush 로 설정할 수 있습니다.

코드 복잡성 관리

@Component 데코레이터에서 사용할 수 있는 다양한 속성을 사용하면 문제를 명확하게 분리하고 컴포넌트의 리소스를 구성하여 코드 복잡성을 관리할 수 있습니다. 다음은 코드 복잡성 관리에 대한 몇 가지 팁입니다.

  • 템플릿(templateUrl)과 스타일(styleUrls)에 별도의 파일 사용: HTML 템플릿과 CSS 스타일을 별도의 파일에 배치하면 컴포넌트 클래스를 로직에 집중하고 유지 관리하기 쉽게 할 수 있습니다.

  • 캡슐화(encapsulation) 활용: ViewEncapsulation을 활용하면 컴포넌트 스타일의 범위를 제어하여 원치 않는 부작용을 방지하고 스타일을 더욱 모듈화할 수 있습니다.

  • 변경 감지 최적화: 적절한 changeDetection 전략을 선택하면 특히 크고 복잡한 애플리케이션에서 컴포넌트의 성능을 향상시킬 수 있습니다.

예:

1
2
3
4
5
6
7
8
9
10
11
12
13
import { Component, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';

@Component({
selector: 'app-complex',
templateUrl: './complex.component.html',
styleUrls: ['./complex.component.scss'],
encapsulation: ViewEncapsulation.Emulated,
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [CustomService],
})
export class ComplexComponent {
// Component logic
}

결론

강력하고 효율적인 Angular 컴포넌트를 생성하려면 @Component 데코레이터와 해당 속성을 이해하는 것이 필수적입니다. 다양한 속성을 활용하여 코드 복잡성을 관리하고, 성능을 개선하고, 유지 관리 가능한 모듈식 애플리케이션을 만들 수 있습니다. 계속해서 Angular를 탐색하고 컴포넌트로 작업하면서 코드를 최적화하고 원활한 사용자 경험을 만드는 새로운 방법을 발견하게 될 것입니다.

Share