본문 바로가기
프로그래밍/Angular

앵귤러 기초(Angular basic) 20. Service, Injector, 의존성 주입(DI)

by 신나요 2022. 1. 29.

이번 포스트에서는 앵귤러 서비스의 작동방식에 대해 알아보겠습니다.

 

이번 포스트에선 아래의 내용을 다루고 있습니다.

  1. 서비스 란?
  2. 인젝터(Injector)
  3. 의존성 주입(Dependency Injection)

서비스 란

비스가 정확히 뭘 말하는 걸까요?

서비스는 집중적인 목적을 가진 클래스입니다.

애플리케이션 제작 시 특정 컴포넌트와 별도로 독립적인 기능을 구현하거나 컴포넌트 간에 데이터 또는 로직이 필요한 경우가 있습니다.

또는 데이터 액세스와 같은 외부 상호 작용을 캡슐화가 필요할 수도 있습니다.

이러한  책임을 컴포넌트에서 서비스로 이동함으로써 코드를 보다 쉽게 테스트, 디버그 및 재사용 할 수 있습니다.

 

서비스 구축에 앞서 앵귤러에서 서비스 및 의존성 주입이 어떻게 작동하는지 알아보도록 하겠습니다.


앵귤러 컴포넌트에서 서비스를 이용하는 방법에는 두 가지가 있습니다.

  1. 컴포넌트에서 서비스 인스턴스를 생성해서 사용
  2. 의존성 주입 이용하여 사용

1. 컴포넌트에서 서비스 인스턴스를 생성해서 사용

컴포넌트는 서비스 클래스의 인스턴스를 작성하고 사용할 수 있습니다.

간단하게 구현할 수 있고 작동도 잘 합니다.

그러나 인스턴스는 컴포넌트의 로컬에 속해 있으므로 데이터나 기타 리소스를 공유할 수 없습니다.

또한 테스트도 어렵게 합니다.

그렇게 때문에 서비스를 이용할 때 일반적으로 이러한 방식을 사용하지 않습니다.

 

2. 인젝터(Injector)와 의존성 주입(Dependency Injection)

앵귤러는 싱글톤이라고 하는 서비스 클래스의 단일 인스턴스를 만들고 유지해주고 있습니다.

앵귤러에는 인젝터라는 것이 있는데,  이 인젝터에서 생성된 서비스 인스턴스의 컨테이너를 유지해 줍니다.

인젝터는 필요에 따라 등록된 각 서비스의 단일 인스턴스(싱글톤)를 생성하고 관리합니다.

위의 그림에서 앵귤러 인젝터는 log, math,  mys(MyService)라는 세 가지 다른 서비스의 인스턴스를 관리하고 있습니다.

 

컴포넌트에서 서비스가 필요한 경우 컴포넌트 클래스에서 서비스를 의존성으로 정의하면 됩니다.

그러면 앵귤러 인젝터에서는 컴포넌트 클래스가 인스턴스화 될 때 서비스의 인스턴스를 제공(주입)해줍니다.

이러한 프로세스를 의존성 주입( Dependency Injection)이라고 합니다.

인젝터의 어려운 내용이 많이 있지만 지금은 간단히 서비스를 생성, 관리, 주입해주는 녀석이라고 생각해 주세요.

 

앵귤러는 단일 인스턴스를 관리하므로 해당 인스턴스의 모든 데이터 또는 로직을 모든 클래스에서 공유하게 됩니다.

이러한 방법은 서비스 인스턴스의 더 나은 관리를 제공하고, 데이터 및 기타 리소스를 공유할 수 있으며 테스트로 서비스를 모의화 하기 쉽기 때문에 서비스를 사용하는데 권장되는 방법입니다.

 

마지막으로 의존성 주입의 일반적인 정의에 대해 살펴 보겠습니다.

의존성 주입이란?

의존성 주입은 클래스가 자체적으로 생성하지 않고 외부 소스에서 의존성이라고 하는 필요한 개체의 인스턴스를 받는 코딩 패턴.

 

앵귤러에서는 외부 소스가 앵귤러 인젝터가 되는 것입니다.


수고하셨습니다.

서비스와 의존성 주입의 개념을 알아보았으니 다음 포스트에서는 서비스를 구축해보도록 하겠습니다.

댓글