자바에서 객체 지향 프로그래밍을 하다 보면 아주 빈번하게 사용하는 부분이 있다. 클래스 간의 관계를 설명하기 위해서 사용되는 개념이 바로 업캐스팅(Upcasting)과 다운캐스팅(Downcasting)이다.
이번 포스팅에서는 이 두 용어에 대해서 알아보자.
업캐스팅 Upcasting
업캐스팅은 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 참조할 수 있게 해주는 개념을 말한다. 즉, 자식 클래스의 객체를 부모 클래스의 참조 변수로 변환해서 사용하는 것을 의미한다.
업캐스팅은 자동으로 이루어진다. 아래는 간단한 예이다.
class Animal { }
class Dog extends Animal { }
Animal animal = new Dog(); // 업캐스팅
위 코드에서 'Dog' 클래스는 'Animal' 클래스의 하위 클래스이다. 따라서 'Dog' 객체를 'Animal' 타입의 변수로 참조할 수 있다. 이것을 업케스팅이라 한다.
다운캐스팅 Downcasting
다운캐스팅은 업캐스팅과 반대로, 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 참조하고자 할 때 사용된다. 그러나 이 작업은 명시적으로 형변환 연산자를 사용하여 수행되어야 한다. 왜냐하면 부모 클래스 타입으로 업캐스팅된 객체에는 자식 클래스의 멤버에 접근할 수 없기 때문이다.
아래는 다운캐스팅의 예이다.
class Animal { }
class Dog extends Animal { }
Animal animal = new Dog(); // 업캐스팅
// 다운캐스팅
Dog dog = (Dog) animal;
위 코드에서 'Animal' 클래스의 인스턴스인 'animal' 변수는 'Dog' 타입으로 다운캐스팅하려면 '(Dog)' 와 같이 형변환 연산자를 사용해야 한다. 이렇게 다운캐스팅을 하면 'dog' 변수를 사용하여 'Dog' 클래스의 멤버에 접근할 수 있다. 다만 주의해야 할 점은, 다운캐스팅은 객체가 실제로 해당 자식 클래스의 인스턴스인 경우에만 작동하며, 그렇지 않으면 예외가 발생할 수 있다.
따라서 이전에 업캐스팅 된 객체가 실제로 어떤 클래스의 객체인지 확인해야 한다.
이번 포스팅에서는 업캐스팅과 다운캐스팅에 대해서 알아보았다. 업캐스팅은 부모 클래스 타입의 참조 변수로 자식 클래스의 객체를 참조하는 것이며, 다운캐스팅은 업캐스팅된 객체를 다시 자식 클래스 타입으로 형변환하여 자식 클래스의 멤버에 접근하는 것이다. 굉장히 빈번하게 사용하기 때문에 반드시 이해하고 넘어가는 것이 필요하다.
'쿤즈 Dev > Java' 카테고리의 다른 글
[Java] 내부 클래스 Inner Class (0) | 2023.09.16 |
---|---|
[Java] 추상 키워드 abstract (0) | 2023.09.15 |
[Java] Object 클래스의 toString(), hashCode() 메서드 (0) | 2023.09.12 |
[Java] 메서드 오버라이딩 (Method Overriding) (0) | 2023.09.11 |
[Java] 자바에서 사용하는 상속(Inheritance)에 대해 알아보자 (0) | 2023.09.10 |
댓글