3.7.3 공통 인터페이스 추출
한 단계 더 나아가서, 타입스크립트나 자바, C# 같은 강력한 타입의 언어를 사용한다면 인터페이스로 의존성의 역할을 명확히 정의할 수 있다. 이를 통해 실제 객체와 가짜 객체 모두 컴파일러 수준에서 준수해야 하는 일종의 규칙을 만들 수 있다.
먼저 새로운 인터페이스를 정의하자(지금부터는 타입스크립트 코드를 사용한다).
// stub-time/03-ts-inject-interface/time-provider-interface.ts
export interface TimeProviderInterface {
getDay(): number;
}
다음으로 TimeProviderInterface 인터페이스를 구현하는 RealTimeProvider 클래스를 생성한다.
// stub-time/03-ts-inject-interface/real-time-provider.ts import * as moment from "moment"; import { TimeProviderInterface } from "./time-provider-interface"; export class RealTimeProvider implements TimeProviderInterface { getDay(): number { return moment().day(); } }