Java/자바 정리

61. 자동 타입 변환 (Promotion) - 상속 관계에서의 업캐스팅

코딩하는냥이 2025. 5. 7. 15:16
반응형

이번 글에서는 클래스 간 상속 관계를 기반으로 한 자동 타입 변환,
업캐스팅(Promotion) 을 학습합니다.
자식 클래스 객체를 부모 클래스 타입으로 자동 변환할 수 있으며,
이 구조는 다형성(Polymorphism)의 핵심 기반이 됩니다.


 

📌 실행 코드 (PromotionExample.java)

class A {
}

class B extends A {
}

class C extends A {
}

class D extends B {
}

class E extends C {
}

public class PromotionExample {
	public static void main(String[] args) {
		B b = new B();
		C c = new C();
		D d = new D();
		E e = new E();

		A a1 = b;
		A a2 = c;
		A a3 = d;
		A a4 = e;

		B b1 = d;
		C c1 = e;

		// B b3 = e; // (X) 컴파일 오류
		// C c2 = d; // (X) 컴파일 오류
	}
}

💬 코드 설명

  • B, C, D, E는 모두 A를 직접 또는 간접적으로 상속
  • 자식 객체를 부모 타입 변수에 자동으로 할당 가능
    • A a1 = b;, A a3 = d; 등 → 자동 타입 변환 (업캐스팅)
  • B b1 = d; → D는 B의 자식이므로 가능
  • C c1 = e; → E는 C의 자식이므로 가능
  • ❌ B b3 = e;, C c2 = d;
    → 서로 형제 관계거나 상속 관계가 없으므로 변환 불가능

📌 상속 관계 계층도

      A
     / \
    B   C
   /     \
  D       E

📌 간단 정리

선언 타입 대입 가능한 객체
A A, B, C, D, E
B B, D (자기 자신과 자식만)
C C, E
❌ B ← E 오류 (상속 관계 없음)

💡 포인트 정리

  • 자식 객체는 부모 타입으로 자동 변환 가능 (업캐스팅)
  • 업캐스팅은 명시적 형변환 없이도 가능
  • 반대 방향(다운캐스팅)은 명시적 형변환 + 안전성 검사 필요
  • 다형성 기반 구조에서 매우 자주 사용됨 (List list = new ArrayList(); 등)