JAVA

[JAVA] 업캐스팅과 다운캐스팅

동준1234 2025. 1. 18. 12:23

오늘은 업캐스팅과 다운캐스팅에 대해 알아보겠습니다. 

업캐스팅과 다운캐스팅은 우리가 사용하는 JAVA 인 객체지향 프로그래밍에서 상속 관계를 활용할 때 유용하게 사용됩니다.

 

1. 업캐스팅

- 업캐스팅은 자식 클래스 객체를 부모 클래스 객체 타입의 참조 변수로 참조하는 것 입니다.

- 이를 통해 부모 클래스에 정의된 메소드와 속성만 사용할 수 있으며, 자식 클래스의 고유 메소드와 속성은 숨겨집니다.

- 하지만 메모리는 여전히 자식 클래스의 형태로 존재합니다.

- Parent : 부모 클래스

- Child : Parent를 상속받는 자식 클래스

여기서 Main 클래스에서 Parent parent = new Child(); 로 업캐스팅을 받습니다.

양식은 위의 코드 처럼 "클래스타입 참조변수명 = new 실제 객체의 타입();" 가 되겠습니다.

parent 는 Parent 타입의 참조변수로 선언되었지만, 실제로는 Child 객체를 참조하고 있습니다.

그래서 parent.greet()을 호출하면 동적바인딩에 의해 Child 클래스에서 오버라이드 한 greet() 메소드가 실행됩니다. 

 

2. 다운캐스팅

- 다운캐스팅은 부모클래스 타입으로 참조된 객체를 다시 자식 클래스 타입으로 변환하는 것 입니다.

- 부모 클래스에는 없지만, 자식 클래스에만 존재하는 메소드를 사용하고 싶을 때 다시 변환한다고 생각하면 됩니다.

- 위 예시 코드를 보면 부모 클래스인 Animal 에는 sound 메소드만 존재하고, Dog 클래스에는 bark 라는 메소드만 존재합니다. 먼저 업캐스팅으로 animal 객체의 sound 를 실행시키면, 실제 객체는 Dog 이지만 Animal 이라는 참조변수를 상속 받기 때문에 sound 메소드를 출력할 수 있습니다. 하지만 우리는 Dog 클래스의 bark 라는 메소드를 출력하고 싶습니다.

그 때는 다운캐스팅을 진행하면 됩니다.

- 다운 캐스팅의 양식 : 클래스타입 참조변수명 = (클래스타입) 객체; 

- 다운캐스팅을 쓸 때는 instanceof 를 써주어야 하는데, 그 이유는 안정성과 예외 방지 때문입니다.

- 다운캐스팅을 사용할  때, 부모 클래스 타입을 자식 클래스 타입으로 변호나하렴녀 실제 객체가 자식 클래스 타입이여야 합니다. 만약 부모 클래스 타입의 객체가 실제로 자식 클래스 객체가 아니라면 다운캐스팅을 시도할 때 ClassCastException 에러가 발생합니다. 따라서 우리는 instanceof 를 사용하여 특정 클래스 타입을 안전하게 확인하여 다운캐스팅을 해줍니다.