개발/Java

Java의 다형성: 캐스팅

ju_ni_ 2023. 7. 18. 15:48
반응형

자바에서 다형성(Polymorphism)은 객체지향 프로그래밍의 특징 중 하나로, 동일한 메소드 호출이 다른 행동을 수행하도록 하는 기능입니다. 이를 가능하게 하는 방법 중 하나가 바로 '캐스팅'입니다. 여기서는 자바의 캐스팅에 대해 알아보고, 업캐스팅과 다운캐스팅을 사용한 예시 코드를 제공하겠습니다.

 

업캐스팅(Upcasting)

먼저, 업캐스팅에 대해 알아보겠습니다. 업캐스팅은 부모 타입의 참조 변수로 자식 타입의 객체를 다루는 것을 의미합니다. 이를 통해, 부모 클래스 타입의 변수가 자식 클래스 타입의 객체를 참조할 수 있습니다.

class Animal {
    void eat() {
        System.out.println("먹는다");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("짖는다");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();  // 업캐스팅
        animal.eat();  // "먹는다" 출력
        // animal.bark();  // 컴파일 에러! Animal 클래스에는 bark() 메소드가 없다.
    }
}

위 코드에서 Dog 클래스는 Animal 클래스를 상속받으므로, Animal 타입의 변수로 Dog 객체를 참조할 수 있습니다. 그러나 업캐스팅된 참조 변수는 부모 클래스 타입의 메소드만 호출할 수 있습니다. 따라서, animal.bark();는 컴파일 에러를 발생시킵니다.

 

다운캐스팅(Downcasting)

다음으로, 다운캐스팅에 대해 알아보겠습니다. 다운캐스팅은 업캐스팅된 객체를 다시 원래의 자식 타입으로 변환하는 것을 의미합니다. 다운캐스팅을 통해, 자식 클래스의 메소드를 다시 사용할 수 있게 됩니다.

class Animal {
    void eat() {
        System.out.println("먹는다");
    }
}

class Dog extends Animal {
    void bark() {
        System.out.println("짖는다");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Dog();  // 업캐스팅
        Dog dog = (Dog) animal;  // 다운캐스팅
        dog.eat();  // "먹는다" 출력
        dog.bark();  // "짖는다" 출력
    }
}

다운캐스팅을 통해, animal 참조 변수를 다시 Dog 타입으로 변환하였습니다. 이제 Dog 클래스의 bark() 메소드를 호출할 수 있습니다.

 

캐스팅을 통해 다형성을 구현하면, 다양한 자식 클래스를 하나의 부모 클래스 참조 변수로 관리할 수 있습니다. 이를 통해 코드의 유연성과 재사용성이 향상되며, 더 복잡한 객체 지향 프로그래밍이 가능해집니다.

반응형