![]()
업캐스팅(Upcasting)

업캐스팅은 자식 클래스의 객체를 부모 클래스 타입으로 변환하는 과정입니다. 이 과정은 Java에서 자동으로 이루어지며, 개발자는 별도의 명시적 형 변환을 수행할 필요가 없습니다.
업캐스팅의 주된 목적은 여러 개의 서브클래스 객체를 하나의 슈퍼클래스 타입의 참조 변수로 관리하여 코드의 가독성을 높이고 유지보수를 용이하게 하기 위함입니다.업캐스팅의 예시
예를 들어, Transportation이라는 슈퍼클래스와 이를 상속받는 Bus라는 서브클래스가 있다고 가정해 보겠습니다.
```java class Transportation { public void move() { System.out.println("Transportation is moving"); } }
class Bus extends Transportation { public void honk() { System.out.println("Bus is honking"); } } ```
위의 코드에서 Bus 클래스는 Transportation 클래스를 상속받습니다. 이제 Bus 클래스의 객체를 생성하고 이를 Transportation 타입으로 업캐스팅해 보겠습니다.
java
public class Main {
public static void main(String[] args) {
Bus bus = new Bus();
Transportation transport = bus; // 업캐스팅
transport.move(); // "Transportation is moving" 출력
}
}
위 코드에서 bus 객체는 Transportation 타입으로 업캐스팅되었습니다. 이 경우, transport 변수는 move() 메서드에 접근할 수 있지만 honk() 메서드에는 접근할 수 없습니다.
업캐스팅의 장점
업캐스팅의 가장 큰 장점은 다형성을 통해 코드를 간결하게 만들 수 있다는 점입니다. 예를 들어, 여러 종류의 Transportation 객체를 관리하는 메서드를 작성할 때, 모든 서브클래스 객체를 Transportation 타입으로 처리할 수 있습니다.
| 장점 | 설명 |
|---|---|
| 코드 간결성 | 여러 서브클래스를 하나의 타입으로 관리 가능 |
| 유지보수 용이 | 변경사항 발생 시 코드 수정이 용이 |
| 다형성 활용 | 다양한 서브클래스 객체를 동일하게 처리 가능 |
다운캐스팅(Downcasting)

다운캐스팅은 업캐스팅된 객체를 다시 서브클래스 타입으로 변환하는 과정입니다. 이 과정은 명시적으로 타입을 지정해야 하며, 잘못된 타입 변환을 방지하기 위해 instanceof 연산자를 사용하여 안전성을 확보하는 것이 좋습니다.
다운캐스팅의 예시
업캐스팅과 마찬가지로, 아래의 예시를 통해 다운캐스팅을 이해해 보겠습니다.
java
public class Main {
public static void main(String[] args) {
Transportation transport = new Bus(); // 업캐스팅
Bus bus = (Bus) transport; // 다운캐스팅
bus.honk(); // "Bus is honking" 출력
}
}
위 코드에서 transport 변수는 Transportation 타입의 객체를 가리키고 있지만, 실제로는 Bus 타입의 객체입니다. 따라서, 다운캐스팅을 통해 Bus 타입으로 변환하면 honk() 메서드에 접근할 수 있게 됩니다.
ClassCastException이 발생할 수 있습니다. 따라서, 안전한 다운캐스팅을 위해 instanceof 연산자를 사용할 필요가 있습니다.
java
if (transport instanceof Bus) {
Bus bus = (Bus) transport; // 안전한 다운캐스팅
bus.honk();
} else {
System.out.println("transport는 Bus 타입이 아닙니다.");
}
다운캐스팅의 필요성
다운캐스팅은 서브클래스의 고유 메서드나 속성에 접근하기 위해 필수적으로 사용됩니다. 업캐스팅된 객체는 슈퍼클래스의 멤버만 접근할 수 있기 때문에, 서브클래스에서 추가적으로 정의한 메서드나 속성을 사용하려면 반드시 다운캐스팅을 통해 원래의 서브클래스 타입으로 복원해야 합니다.
| 필요성 | 설명 |
|---|---|
| 서브클래스 접근 | 서브클래스의 고유 메서드 및 필드 접근 가능 |
| 타입 안전성 | instanceof를 통해 안전한 다운캐스팅 가능 |
| 코드 유연성 | 다양한 객체를 유연하게 다룰 수 있는 장점 |
결론

Java에서의 업캐스팅과 다운캐스팅은 객체 지향 프로그래밍의 다형성을 활용하기 위한 중요한 기술입니다. 업캐스팅을 통해 여러 서브클래스 객체를 하나의 슈퍼클래스 타입으로 관리할 수 있으며, 이는 코드의 간결성과 유지보수성을 높이는 데 기여합니다.
반면, 다운캐스팅은 업캐스팅된 객체를 원래의 서브클래스 타입으로 복원하여 서브클래스의 고유 메서드나 속성에 접근할 수 있도록 해줍니다. 이 두 가지 개념은 자바 프로그래밍에서 객체 지향적인 설계를 구현하는 데 있어 필수적인 요소이며, 올바르게 알아보고 활용하는 것이 필요합니다.다형성을 통한 코드의 유연성과 재사용성을 높이기 위해 개발자는 업캐스팅과 다운캐스팅의 원리를 잘 숙지하고 있어야 합니다.