코딩/Java

자바 - 다운캐스팅 사용 이유

Junoni 2024. 11. 15. 06:21
반응형
public class DownCastingExample {
    public static void main(String[] args) {
        Role warrior = new Warrior();
        Role mage = new Mage();

        warrior.attack(); // 공격
        mage.attack();    // 공격

        // mage.heal(); 에러: heal()라는 메소드 없음
    }
}

class Role {
    public void attack() {
        System.out.println("공격");
    }
}

class Warrior extends Role {
}

class Mage extends Role {
    public void heal() {
        System.out.println("마법사 힐");
    }
}

위와 같이 객체 생성 시 업캐스팅을 한 경우, 해당 객체는 업캐스팅한 클래스 혹은 인터페이스의 멤버 변수와 메소드만 접근이 가능하다.

즉, warriormage 두 인스턴스는 타입이 Role이므로 Role 클래스의 attack() 메소드만 실행이 가능하다.

 

만약 mage 인스턴스로 Mage 클래스의 heal() 메소드를 실행하고 싶으면 해당 인스턴스의 타입을 Role에서 Mage로 다운캐스팅하면 된다.

 

 

 

public class DownCastingExample {
    public static void main(String[] args) {
        Role warrior = new Warrior();
        Role mage = new Mage();

        warrior.attack(); // 공격
        mage.attack();    // 공격

        Mage newMage = (Mage)mage; // Role -> Mage 타입으로 다운캐스팅
        newMage.heal(); // 마법사 힐
    }
}

class Role {
    public void attack() {
        System.out.println("공격");
    }
}

class Warrior extends Role {
}

class Mage extends Role {
    public void heal() {
        System.out.println("마법사 힐");
    }
}

mage 인스턴스를 Mage 타입으로 다운캐스팅하여 새로운 newMage 인스턴스에 할당했다.

newMageheal() 메소드 접근이 가능하여 실행이 됐다.

 

 

결론

객체를 다운캐스팅을 하는 이유는 다운캐스팅할 경우, 다운캐스팅한(자식) 클래스의 멤버 변수와 메소드를 접근이 가능하기 때문이다.

반응형