더북(TheBook)

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 [];
    }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.