호출자
구체 클래스가 아니라 필요한 메서드 모양만 알고 작업을 요청합니다.
인터페이스는 구현체를 감추는 벽이 아니라, 호출자가 의존할 안정적인 계약을 앞에 세우는 설계 방식입니다.
구체 클래스가 아니라 필요한 메서드 모양만 알고 작업을 요청합니다.
입력, 출력, 속성 이름을 고정해 구현체가 지켜야 할 표면을 만듭니다.
파일 로그, 콘솔 로그, 테스트 더블처럼 같은 계약을 다른 방식으로 만족합니다.
호출자 변경 없이 구현체만 바꿈
가짜 구현으로 의존성 격리
새 구현체를 추가해 기능 확장