티스토리 뷰

Java

자바 - 업캐스팅/다운캐스팅

Kodong's blog 2025. 8. 29. 20:08

자바에서, 기본형을 형 변환하기 위해서는 캐스팅이라는 문법을 사용하였다.

int num = (int)3.5;

하지만, 이것은 기본형에서만 사용할 수 있다.

 

그렇다면, 레퍼클래스에서는 어떻게 사용할 수 있을까? 여기서 바로 업캐스팅과 다운 캐스팅 개념이 사용되는것이다.

업캐스팅과 다운캐스팅을 이해하기 위해서는 부모 클래스와 자식클래스를 이해해야한다.

자식클래스는 부모 클래스를 상속하고 있기에 부모의 멤버를 모두 가지고 있다.

반면 부모 클래스는 자식 클래스의 모든 멤버를 가지고 있지 않다.

 

즉, 참조형의 형변환은 해당 참조변수의 사용할 수 있는 멤버의 개수를 조절하는 것이다.

 

예시를 참고하자)

class Parent {
	int age;
	String name;
}

class Child extends Parent {
	/*
    String name;
    int age;
    */
	int number;
}

Parent p = new Parent(); 
Child c = new Child();

Parent p2 = (Parent) c; // 업캐스팅 - "자식 → 부모"
Child c2 = (Child) p2; // 다운캐스팅 - "부모 → 자식"

 

( ☕ JAVA 업캐스팅 & 다운캐스팅 - 완벽 이해하기 이 블로그 참조함)

이 개념을 내가 프로젝트에서 쓰게되면 그때 다시 와서 더 세부적으로 정리하도록 하겠다.

 

+) 20251102/15:38 추가함)

좀 어려운 예제를 가지고 왔다. ( 제네릭 문법도 사용된 예제이다. )

package main;

interface ISample<T> {
    public void addElement(T t, int index);
    public T getElement(int index);
}

class Sample<T> implements ISample<T> {
    private T[] array;

    public Sample() {
        array = (T[]) new Object[10]; // ← 다운 캐스팅!!
    }

    @Override
    public void addElement(T element, int index) {
        array[index] = element;
    }

    @Override
    public T getElement(int index) {
        return array[index];
    }
}


public class Application {

    public static void main(String[] args) {
        Sample<String> sample = new Sample<>();
        sample.addElement("This is string", 5);
        System.out.println(sample.getElement(5));
    }

}

(실행결과)

 

이 코드의 내가 주석을 달아놓은 부분 ( array = (T[]) new Object[10]; )에 바로 다운캐스팅이 사용된 것이다.

좀 더 자세하게 말하자면, 

부모( Object )에서 자식( T )으로 다운 캐스팅된 것이다. 

 

---------------------------------------------------------------------------------------

여기까지.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함