서비스는 @Injectable 장식자 ( = 주입 가능한 클래스라는 뜻 ) 를 추가한 클래스 이다.
@Injectable 을 생략한다고 해서 의존성 주입에 문제가 생기는 것은 아니지만, 생략하였을때 일반 클래스라 오인할 수 있기 때문에 반드시 추가해야 한다.
===> hello.service.ts / HelloService 라는 서비스 생성
===> hello.component.ts providers 에 사용할 서비스를 컴포넌트에서 HelloService 를 불러와 생성자에서 선언 후 사용.
생성자에서 선언하지 않고 let Hello = new HelloSerivce(); 로 사용가능.
- 객체지향 서비스
크게 부모 / 자식 클래스가 있고 자식 클래스에는 공통 메서드가 정의돼 있기 떄문에 공통 메서드를 제어할 수 있는 인터페이스를 정의한다.
===> parent.service.ts / 부모 서비스
===> child.service.ts / 자식 서비스
위의 예시처럼 First / Second 로 Parent 를 사용가능하지만
SecondChild 에서는 super 를 통하여 호출하기 때문에 다른 컴포넌트나 객체로 부모의 데이터를 전달 할수 없으나 FirstChild 에서 처럼 생성자에서 부모를 선언 후 사용한다면 전달이 가능하기 떄문에 extends 를 사용하는것 대신에 생성자에서 부모를 선언하여 사용하는 것이 바람직하다.
===> oop.component.ts / 컴포넌트
- 목 객체 서비스
서버 의존성 없이 데이터를 제공하기 위해 테스트 데이터를 정의한 객체이다.
목 객체를 사용하는 이유는 개발 과정에서 서버 의존성과 같은 외부 의존성을 제거함으로써 테스트를 가능하게 하기 위함이다.
===> user.ts / User 데이터 객체
===> mock-user.ts / 테스트 데이터 객체 USER 생성
===> mock.service.ts / 목 서비스 생성 : 테스트 데이터 USER 를 리턴하는 서비스 생성
===> mock-component.ts / 해당 서비스와 데이터 타입 객체를 불러와 사용