DEV/Java

다운 캐스팅(DownCasting)

Beomsu Koh 2023. 4. 27.

다운 캐스팅(DownCasting)

다운 캐스팅(Downcasting)은 슈퍼클래스(부모 클래스) 타입의 참조를 서브클래스(자식 클래스) 타입으로 변환하는 과정을 의미합니다.

다운 캐스팅의 사용 목적은 다음과 같습니다.

  1. 다형성의 활용
    1. 다형성을 통해 슈퍼클래스 타입의 참조 변수로 서브클래스의 인스턴스를 참조할 수 있습니다.
    2. 이때, 슈퍼클래스에 없는 서브클래스의 메서드나 필드를 사용하고자 할 때 다운 캐스팅을 사용하여 서브클래스 타입으로 변환한 뒤 접근할 수 있습니다.
  2. 메모리 사용 최적화
    1. 슈퍼클래스 타입의 참조 변수로 여러 서브클래스의 인스턴스를 참조할 수 있으므로, 메모리 사용을 줄이고 코드의 유지 보수성을 높일 수 있습니다.

Java에서 다운 캐스팅의 예시

class Animal {
    public void makeSound() {
        System.out.println("The animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("The dog barks");
    }
    
    public void playFetch() {
        System.out.println("The dog plays fetch");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myAnimal = new Dog(); // 업 캐스팅 (Upcasting)
        myAnimal.makeSound(); // 다형성을 통해 오버라이딩 된 메서드 호출
        
        if (myAnimal instanceof Dog) {
            Dog myDog = (Dog) myAnimal; // 다운 캐스팅 (Downcasting)
            myDog.playFetch(); // 서브클래스의 메서드 호출
        }
    }
}

Instanceof : 함께 사용하면 좋다

instanceof는 Java에서 특정 객체가 특정 클래스 또는 인터페이스의 인스턴스인지 확인하는 연산자입니다.
instanceof는 주로 다운 캐스팅을 수행하기 전에 안전성을 확인하는 용도로 사용됩니다.
또한, 상속 관계나 인터페이스 구현 관계를 통해 여러 클래스의 객체들을 처리할 때 객체의 실제 타입을 확인하기 위해 사용됩니다.

instanceof 연산자는 다음과 같은 형식으로 사용됩니다:

object instanceof ClassName

object는 확인하려는 객체이며, ClassName은 확인하려는 클래스 또는 인터페이스의 이름입니다.
연산자는 objectClassName의 인스턴스이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>

댓글