Language/Java

OOP - 다형성

용용띠용 2025. 4. 15. 17:14

다형성

: 하나의 타입으로 여러 객체를 다룰 수 있는 기능

 

형변환(Casting)

1. 업캐스팅

: 자식 클래스의 객체를 부모 클래스 타입으로 변환하는 것

- 자동 형변환

Animal animal = new Dog();

 

특징: 자식 클래스의 고유 기능 사용 불가 

     => 부모 클래스의 멤버만 접근 가능

 

 

2. 다운캐스팅

: 부모 클래스의 객체를 자식 클래스 타입으로 변환하는 것

- 명시적 형변환: (자식 클래스 타입)

Animal animal = new Dog();
Dog dog = (Dog)animal;

 

특징: 자식 클래스 고유 기능 사용 가능 

 

 

다운 캐스팅 유의점

: 잘못된 다운캐스팅 컴파일 단계에서 감지 불가 => 런타임 시점에 ClassCastException 발생

이유: 문법적 에러는 아니기 때문

public class Main {

    public static void main(String[] args) {
        // 다운 캐스팅
        Animal dog = new Dog();
        //에러 발생x
        Cat cat1 = (Cat) dog; 
        cat1.scratch(); // 에러 발생
    }
}

 

해결책

: instanceof 사용해 미리 타입 검사

     - 객체가 특정 클래스나 인터페이스의 인스턴스인지 확인

public class Main {

    public static void main(String[] args) {

        Animal animal = new Dog();

		// animal이 Cat의 인스턴스인가 확인
        if (animal2 instanceof Cat) {
            Cat cat = (Cat) animal2;
            cat.scratch();
        } else {
            System.out.println("객체가 고양이가 아닙니다.");
        }
    }
}