더북(TheBook)

3.1.3 인터페이스 타입으로 변환


다음 조각은 숫자 시퀀스 값들의 평균을 계산한다.

IntSequence digits = new DigitSequence(1729);

double avg = average(digits, 100);

    // 처음 시퀀스 4개의 값만 보게 된다.


digits 변수를 보자. digits의 타입은 DigitSequence가 아니라 IntSequence다. IntSequence 타입 변수는 IntSequence 인터페이스를 구현한 어떤 클래스의 객체라도 참조할 수 있다. 객체의 클래스가 인터페이스를 구현할 때는 이 객체를 해당 인터페이스 타입 변수에 할당할 수 있다. 또 이 객체를 해당 인터페이스를 기대하는 메서드에도 전달할 수 있다.

유용한 용어를 하나 알아 두자. T 타입의 모든 값을 변환 없이 S 타입의 변수에 할당할 수 있다면 S 타입은 T 타입(서브타입(subtype))의 슈퍼타입(supertype)이다. 예를 들어 IntSequence 인터페이스는 DigitSequence 클래스의 슈퍼타입이다.

Note ≣

인터페이스 타입으로 변수를 선언할 수 있지만, 타입이 인터페이스 자체인 객체는 만들 수 없다. 모든 객체는 클래스의 인스턴스다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.