Java

[Java] Casting (업캐스팅 & 다운캐스팅)

DH_0518 2024. 2. 18. 15:02

Java에서 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 'Casting(형변환)' 이라고 한다. 주로 primitive 타입과 reference 타입에서 값을 대입하거나 연산을 위해 캐스팅이 발생한다.

 

 

업캐스팅 & 다운캐스팅

 

 

상속 관계에 있는 부모 클래스(Super Class)와 자식 클래스(Sub Class)간에도 캐스팅이 가능하다. 부모 클래스를 자식 클래스로 캐스팅 하는것을 DownCasting, 자식 클래스를 부모 클래스로 캐스팅 하는것을 UpCasting이라 한다. (단, 형제 클래스 끼리는 캐스팅이 불가능)

 

업캐스팅(UpCasting)

  • 자식 클래스를 부모 클래스로 캐스팅 하는 것
  • 캐스팅 연산자 괄호를 생략할 수 있다
    ex) 아래의 두 방법 모두 사용 가능
       Parent p = (Parent) new Child();
       Parent p = new Child();
  • 부모 클래스로 캐스팅 되므로, '자식 클래스에만' 있는 속성과 메서드는 실행하지 못한다
  • 만약 자식 클래스에서 오버라이딩한 부모 클래스의 메서드가 있다면,
    오버라이딩 특성상 런타임 환경에서 동적으로 바인딩 되기에 부모 클래스가 아닌 자식 클래스의 메서드가 실행된다

 

다운캐스팅(DownCasting)

  • 부모 클래스를 자식 클래스로 캐스팅 하는 것
  • 캐스팅 연산자 괄호를 생략할 수 없다. 꼭 필요!
  • 다운캐스팅은 업캐스팅한 자식 클래스를, 다운캐스팅을 통해 다시 자식 클래스로 되돌려 본래의 필드와 메서드를 복구하는데 목적을 둔다
  • 따라서 그냥 부모 클래스가 아니라, 업캐스팅한 객체만 다운캐스팅을 할 수 있다
public class CastingTest {
	// 부모 클래스
    public static class Parent {
        int parentAge = 30;
        public String name() {
            return "Parent";
        }
    }
	
    // 자식 클래스
    public static class Child extends Parent {
        int childAge = 10;

        @Override
        public String name() {
            return "Child";
        }
    }

	// 형변환 테스트
    public static void main(String[] args) {
        Parent upCastingChild = new Child();                    // 업캐스팅, 캐스팅 연산자 필요 없음
        Child downCastingParent = (Child) upCastingChild;       // 다운캐스팅, 캐스팅 연산자 필요, 복구시키는데 목적이 있음

        //System.out.println(upCastingChild.childAge);                  // 컴파일 에러, 부모 클래스로 형변환 했기 때문에 childAge가 없음
        System.out.println("다운캐스팅 결과, Age: " + downCastingParent.parentAge);    // 가능, 부모 클래스로부터 상속받은 필드

        System.out.println("업캐스팅 결과, name: " + upCastingChild.name());          // Child의 오버라이딩된 메소드 호출
        System.out.println("다운캐스팅 결과, name: " + downCastingParent.name());      // Child의 오버라이딩된 메소드 호출
    }
}

UpCasting & DownCasting 결과

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Reference

 

[Java] Casting(업캐스팅 & 다운캐스팅) | 👨🏻‍💻 Tech Interview

[Java] Casting(업캐스팅 & 다운캐스팅) 캐스팅이란? 변수가 원하는 정보를 다 갖고 있는 것 (1)은 0.1이 double형이지만, int로 될 정보 또한 가지고 있음 (2)는 true는 int형이 될 정보를 가지고 있지 않음

gyoogle.dev

 

☕ JAVA 업캐스팅 & 다운캐스팅 - 완벽 이해하기

자바의 참조형 캐스팅 하나의 데이터 타입을 다른 타입으로 바꾸는 것을 타입 변환 혹은 형변환(캐스팅) 이라고 한다. 자바의 데이터형을 알아보면 크게 두가지로 나뉘게 된다. 기본형(primitive ty

inpa.tistory.com