5장
모든 내용은 조우진 저자의 앵귤러 첫걸음에 기초한 정보입니다. 간략한 개인 정리용이며 상업용이 아닙니다.
서비스
개인적인 생각으로 서비스는 앵귤러에서 제일 많은 역할을 하고 있지않나라고 감히 생각한다. 먼저 서비스란 컴포넌트에서 비즈니스 로직이나 값을 다루는 클래스 이다. 만약 서비스가 따로 존재 하지 않았다면 컴포넌트의 역할과 상관없는 로직까지 모두 컴포넌트가 관리를 했을 것이다. 이러한 뷰의 로직과 비즈니스 로직이 공존하는 상황을 안티패턴 이라고 한다. (안티패턴이라는 말도 많이 사용합니다.)
- 서비스를 사용함으로 컴포넌트는 템플릿을 통해 뷰와의 상호작용만 합니다.
- 필요한 로직만 서비스의 메서드를 호출하여 사용합니다.
의존성 주입
데코레이터
@Injectable
해당 class에 의존성을 주입하기 위해 사용합니다.
- 서비스에서 생성자의 매개변수로 의존성 주입이 필요한 경우에는 클래스에 적어줍니다.
- 생성자의 매개변수로 주입받을 의존성 정보가 없다면 붙이지 않아도 되지만 관례상(확장성을 위해) 붙이는 것을 권장합니다.
@Inject
헤당 parameter에 의존성을 주입하기 위해 사용합니다.
- 주입할 대상의 정보를 선언할 때 사용합니다.
싱글톤으로 사용하기
- 시스템안에서 단일 객체로 존재하는 것 각각의 컴포넌트에서 인스턴스를 생성해서 사용하게 되면 서로 다른 인스턴스임으로 동일하게 적용을 할 수 없습니다. 그러나 서비스의 인스턴스를 하나만 생성하여 여러 컴포넌트가 공유를 하면 수정한 자신의 컴포넌트에서만 유효하게 되는 것을 막을 수 있습니다.
@input
input데코레이터는 간단하게 상위의 컴포넌트에서 전달한 데이터를 선언한 곳으로 받겠다는 것입니다. (추후 추가예정 + @output)
- 이 데코레이션을 사용하려면 해당 컴포넌트 태그에 프로퍼티 바인딩을 추가합니다.
providers
- ClassProvider
- ValueProvider
- ExistingProvider
- FactoryProvider
- TypeProvider
- 사용형태
{provide: MySpecialLogger, useValue: MySpecialLogger}
{provide: 'port', useValue: 8712}
-
ClassProvider 는 짧게
MySpecialLogger
라고만 적습니다. - ValueProvider 에서 키는 토큰으로 던지는 것이 바람직하다.(InjectionToken 사용)
번외 의존성 주입기 트리에서의 providers
@Component 데코레이터에서도 providers 정보를 줄 수 있습니다. 이처럼 이용하게 되면 컴포넌트 레벨에서 새로운 서비스를 생성해 준다는 것입니다.
Host, Optinal 데코레이터
의존성 주입에 있어서 이용하면 동적으로 다룰 수 있습니다.
Host 데코레이터
현재 컴포넌트에서 상위 의존성 주입 정보를 찾지 않고 현재 의존성 주입정보를 주입 하라는 의미입니다.
Optinal 데코레이터
의존성 주입 정보가 없을 경우 의존성 주입을 받지 않아도 된다는 의미입니다.