문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판이전 판다음 판 | 이전 판 | ||
| angular:dependency-injection [2019/08/19 11:55] – [Angular의 의존성 주입] taekgu | angular:dependency-injection [2025/04/15 10:05] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 2: | 줄 2: | ||
| 의존성 주입(Dependency injection, DI)은 애플리케이션 디자인 패턴 중에서도 아주 중요한 패턴입니다. Angular는 독자적인 의존성 주입 시스템을 제공하고 있기 때문에, 이 패턴을 활용하면 Angular 애플리케이션을 좀 더 효율적인 모듈 형태로 구성할 수 있습니다. | 의존성 주입(Dependency injection, DI)은 애플리케이션 디자인 패턴 중에서도 아주 중요한 패턴입니다. Angular는 독자적인 의존성 주입 시스템을 제공하고 있기 때문에, 이 패턴을 활용하면 Angular 애플리케이션을 좀 더 효율적인 모듈 형태로 구성할 수 있습니다. | ||
| - | 의존성(dependencies)은 어떤 클래스가 동작하기 위해 필요한 서비스나 객체를 의미합니다. 그리고 __의존성 주입 패턴은 이 의존성을 직접 생성하지 않고 외부 어딘가에서 받아오도록 요청하는 패턴__입니다. | + | 의존성(dependencies)은 어떤 클래스가 동작하기 위해 필요한 서비스나 객체를 의미합니다. 그리고 __**의존성 주입 패턴은 이 의존성을 직접 생성하지 않고 외부 어딘가에서 받아오도록 요청하는 패턴**__입니다. |
| - | Angular에서는 클래스의 인스턴스가 생성될 때 이 클래스에 필요한 의존성을 프레임워크가 생성해서 전달합니다. 이 문서는 Angular에서 의존성 주입이 어떻게 동작하는지, | + | Angular에서는 클래스의 인스턴스가 생성될 때 이 클래스에 필요한 |
| + | |||
| + | <WRAP center round info 80%> | ||
| + | 한 파일에 클래스를 여러개 정의하면 이 파일을 접하는 많은 사람들에게 혼란을 줄 수 있습니다. 일반적으로 컴포넌트와 서비스는 파일 하나에 하나씩 정의하는 것을 권장합니다. | ||
| + | |||
| + | 그런데 어떤 이유로 컴포넌트와 서비스를 한 파일에 정의해야 한다면 서비스를 먼저 정의하고 컴포넌트를 나중에 정의하세요. 서비스보다 컴포넌트를 먼저 정의하면 런타임 null 참조 에러가 발생합니다. | ||
| + | |||
| + | 그리고 이 블로그에서 설명한 것처럼 forwardRef() 메소드를 사용하면 컴포넌트를 먼저 정의할 수도 있습니다. | ||
| + | |||
| + | forwardRef() 메소드는 순환 참조를 방지할 때도 사용합니다. DI Cookbook에서 설명하는 예제를 참고하세요. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== 의존성으로 주입할 서비스 클래스 정의하기 ===== | ||
| + | <code bash> | ||
| + | ng generate service heroes/hero | ||
| + | </ | ||
| + | CLI생성한 소스는 | ||
| + | <code javascript src/ | ||
| + | import { Injectable } from ' | ||
| + | |||
| + | @Injectable({ | ||
| + | providedIn: ' | ||
| + | }) | ||
| + | export class HeroService { | ||
| + | constructor() { } | ||
| + | } | ||
| + | </ | ||
| + | Angular 서비스를 정의하는 코드에서 '' | ||
| ===== Dependency Injection (DI) ===== | ===== Dependency Injection (DI) ===== | ||