RealTimeProvider를 만들었다면 이제는 PasswordVerifier의 생성자 매개변수가 RealTime Provider가 아닌 TimeProviderInterface 타입의 의존성을 받도록 수정한다. 이것으로 RealTime Provider의 구현체에 신경 쓰기보다는 인터페이스를 만족하기만 하면 어떤 구현체가 전달되든 상관없도록 만들 수 있다.
// stub-time/03-ts-inject-interface/password-verifier-time03.ts
export class PasswordVerifier {
private _timeProvider: TimeProviderInterface;
constructor(rules: any[], timeProvider: TimeProviderInterface) {
this._timeProvider = timeProvider;
}
verify(input: string): string[] {
const isWeekend = [SUNDAY, SATURDAY]
.filter(x => x === this._timeProvider.getDay())
.length > 0;
if (isWeekend) {
throw new Error("It's the weekend!");
}
// 더 많은 로직이 여기에 있다.
return [];
}
}