더북(TheBook)

3.1.4 캐스트와 instanceof 연산자


가끔 반대로 변환(슈퍼타입 → 서브타입)해야 할 때도 있다. 이때는 캐스트(cast)(강제 변환)를 사용해야 한다. 예를 들어 IntSequence 변수에 저장된 객체가 실제로는 DigitSequence라는 사실을 안다면 다음과 같이 타입을 변환할 수 있다.

IntSequence sequence = ...;

DigitSequence digits = (DigitSequence) sequence;

System.out.println(digits.rest());


이 코드에서 rest()IntSequence의 메서드가 아니라 DigitSequence의 메서드이므로 캐스트가 필요하다. 이보다 더 흥미로운 예제를 연습문제 2에 소개했으니 참고하자.

객체는 실제 클래스나 그 슈퍼타입으로만 캐스트할 수 있다. 잘못 캐스트하면 컴파일 시간 오류나 클래스 캐스트 예외(ClassCastException)가 일어난다.

String digitString = (String) sequence;

    // 작동이 불가능하다. IntSequence String의 슈퍼타입이 아니다.

RandomSequence randoms = (RandomSequence) sequence;

    // 작동 가능성이 있지만, 불가능하면 클래스 캐스트 예외를 던진다.

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