상속에서의 형 변환(타입 변환)

김지수·2023년 6월 29일

형 변환(타입 변환)이란?

💡 상속에서 형 변환(혹은 타입 변환)은 한 클래스가 다른 클래스로 형 변환되는 것을 의미한다. 이는 부모 클래스와 자식 클래스 간의 관계에서 발생한다.

자식 클래스는 부모 클래스의 모든 멤버(변수, 메서드)를 상속받기 때문에,
자식 클래스의 인스턴스는 부모 클래스의 타입으로 간주될 수 있다.

이를 이용하여 자식 클래스의 인스턴스를 부모 클래스 타입으로 형 변환할 수 있다.


형 변환은 상속 관계에 있는 클래스들 간의 타입 호환성과 유연성을 제공한다. 이를 통해 다형성(polymorphism)의 개념을 구현할 수 있으며, 코드의 재사용성과 확장성을 높일 수 있다.

예시

Customer customerPark = new VIPCustomer();

customerPark 변수는 Customer 클래스의 변수를 참조한다.
( VIPCustomer에만 존재하는 변수라면 참조하지 못한다. )

단, 메서드는 (양쪽에 존재할 때) VIPCustomer의 메서드를 참조한다.
따라서 서로 공유하는 메서드 중에 VIPCustomer 클래스의 인스턴스에서 오버라이딩(재정의) 된 고유한 기능이 있다면, customerPark 변수는 그 기능을 포함하게 된다.

customerPark 변수가 VIPCustomer 클래스의 인스턴스를 참조하고 있다면,
메서드 호출은 참조하는 인스턴스의 실제 타입을 기반으로 결정되기 때문이다.

따라서 customerPark를 통해 VIPCustomer 클래스에 정의된 메서드를 호출할 수 있다.


  • 참고 이미지

    출처: Do it! 자바 프로그래밍 입문 part 1 | 섹션 5 | 메서드 재정의와 가상 메서드의 원리

요약

  • 변수Customer 참조 (부모 클래스)
  • 메서드VIPCustomer 참조 (자식 클래스의 인스턴스)



형 변환의 두 가지 방식


1. Upcasting (업캐스팅)

  • 자식 클래스의 인스턴스를 부모 클래스 타입으로 형 변환하는 것
  • 자동으로 이루어지며, 명시적인 형 변환 연산자가 필요하지 않다.
  • 업캐스팅된 인스턴스는 부모 클래스의 멤버에만 접근할 수 있으며,
    자식 클래스에서 추가된 멤버에는 접근할 수 없습니다.

2. Downcasting (다운캐스팅)

  • 부모 클래스 타입의 인스턴스를 자식 클래스 타입으로 형 변환하는 것
  • 명시적인 형 변환 연산자를 사용하여 수동으로 이루어진다.
  • 업캐스팅된 인스턴스를 다시 원래의 자식 클래스 타입으로 되돌리는 작업이다.
  • 다운캐스팅은 부모 클래스 타입의 인스턴스가 실제로 자식 클래스의 인스턴스인 경우에만 성공하며, 그렇지 않을 경우 ClassCastException 예외가 발생할 수 있다.
  • 다운캐스팅된 인스턴스는 자식 클래스의 멤버에도 접근할 수 있다.
profile
안녕하세요

0개의 댓글