최대 1 분 소요

자료형이 서로 다를 때는 컴파일러가 자동으로 타입을 변환해 주거나 개발자가 직접 명시적으로 타입을 변환해 줘야한다. 객체에서도 이러한 타입 변환이 일어나는데 이름 업캐스팅(Upcasting), 다운캐스팅(Downcasting)이라 한다.

객체의 업캐스팅과 다운캐스팅

기본 자료형

  • 업 캐스팅 : 범위가 좁은 쪽 -> 넓은 쪽으로 캐스팅하는 것
  • 다운 캐스팅 : 범위가 넓은 쪽 -> 좁은 쪽

객체

  • 업 캐스팅 : 자식 클래스 -> 부모 클래스 쪽으로 변환
    • 항상 가능 명시적으로 적어 주지 않아도 컴파일러가 대신 넣어 준다.
  • 다운 캐스팅 : 부모 클래스 -> 자식 클래스 쪽으로 변환
    • 개발자가 직접 명시적으로 넣어 줘야한다.
    • 잘못된 다운 캐스팅을 수행하면 ClassCastException이라는 예외가 발생한다.
class Human {
}

class Student extends Human {
}

class HighSchool extends Student {
}

public class Test {
    public static void main(String[] args) {
        // 고등학생 -> 학생 -> 사람 (o)
        HighSchool a = new HighSchool();
        Human h1 = a;
        
        // 사람 -> 학생 -> 고등학생 (x)
        Human h2 = new Human();
        // -> java.lang.ClassCastException
        Student s1 = (Student) h2; 

        Human h3 = new Student();
        // (o)
        Student s = (Student) h3;
        // Exception in thread "main" java.lang.ClassCastException:
        HighSchool h = (HighSchool) h3;
    }
}

캐스팅 가능 여부는 무슨 타입으로 선언돼 있는지는 중요하지 않으며 어떤 생성자로 생성됐는지가 중요하다.

댓글남기기