본문 바로가기

Java

[Java] 업캐스팅, 다운캐스팅

업캐스팅?


자식 클래스가 부모 클래스 타입으로 캐스팅 되는 것

특징

  • 명시적 형변환 연산자 생략 가능
  • 부모 클래스에 정의된 필드, 메소드만 접근 가능
  • 자식 클래스에서 오버라이딩 된 메소드는 실제 객체 타입에 따라 실행된다(런타임 다형성)

 

업캐스팅 사용 시 주의 사항

 


 필드, 메소드 갯수가 제한되어 자식 클래스에 있는 필드, 메소드는 사용할 수 없게 된다.

자식 객체를 부모 타입으로 참조했기 때문에 부모 클래스에 정의된 필드, 메소드만 접근할 수 있다.

오버라이딩 된 메소드는 자식 메소드로 실행된다.

실제 객체 타입(자식 클래스)의 것이 실행된다. (다형성)

 

업캐스팅을 왜 사용하는가?


다양한 자식 객체를 부모 타입으로 통일해 관리

자식 클래스가 많아도 하나의 인스턴스로 묶어서 관리할 수 있다.

 

다운캐스팅?


부모 클래스 타입의 객체를 자식 클래스 타입으로 캐스팅 하는 것

특징

  • 반드시 명시적 형변환 연산자(괄호)가 필요하다.
  • 업캐스팅 된 객체만 다운캐스팅이 가능하다.
  • 자식 클래스의 고유 맴버(필드, 메소드)에 접근할 수 있다.

 

다운캐스팅 사용 시 주의사항


잘못된 다운캐스팅 시 런타임 오류(ClassCastException) 가 발생

instanceof 연산자로 확인하는 게 좋음

반드시 업캐스팅 된 부모 객체만 다운캐스팅 해야한다.

기본형 캐스팅의 경우 값 손실만 발생하지만 업캐스팅 되지 않은 생 부모 클래스는 다운캐스팅 시 런타임 에러 발생

 

다운캐스팅을 왜 사용하는가?


업캐스팅한 객체를 되돌리려고 사용

하나의 인스턴스로 통합해 관리한 부모 객체를 다운캐스팅 함으로써 자식 고유 맴버(필드, 메소드)에 접근할 수 있기 때문에 사용한다.

'Java' 카테고리의 다른 글

Interceptor  (4) 2025.07.21
Spring 정리  (0) 2025.07.19
자바 계산기 구현  (4) 2025.07.12
추상화와 상속  (2) 2025.07.10
클래스 문법  (1) 2025.07.08