반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- javascript
- json
- HashMap
- math
- ArrayList
- 정규식
- 이탈리아
- 인텔리제이
- 자바스크립트
- Visual Studio Code
- IntelliJ
- 자바문법
- 이클립스
- CSS
- Eclipse
- list
- date
- html
- 배열
- map
- Array
- Java
- 문자열
- input
- table
- replace
- js
- vscode
- 자바
- string
Archives
- Today
- Total
어제 오늘 내일
[Java] 클래스 형변환 (업캐스팅, 다운캐스팅) 본문
Java에서 클래스 간의 형변환은 상속 관계가 있을 때만 가능합니다.
상속 관계에서는 부모 타입과 자식 타입 사이에서 자유롭게 변환이 가능하며, 이를 업캐스팅(Upcasting)과 다운캐스팅(Downcasting)이라고 부릅니다.
이 글에서는 두 개념의 차이와 사용법을 예제 중심으로 정리합니다.
1. 업캐스팅(Upcasting)
자식 타입 → 부모 타입으로 변환하는 것
업캐스팅은 가장 기본적인 형변환이며 자동 형변환됩니다.
class Parent {
void hello() {
System.out.println("Parent hello");
}
}
class Child extends Parent {
void bye() {
System.out.println("Child bye");
}
}
Parent p = new Child(); // 업캐스팅
p.hello(); // 부모 메서드 사용 가능
특징
- 자식 객체이지만 부모 타입으로 취급됨
- 부모가 가진 멤버만 사용할 수 있음
- 자동 형변환 가능 (명시적 캐스팅 불필요)
주의
p.bye(); // ❌ 부모 타입에서는 호출 불가능
2. 다운캐스팅(Downcasting)
부모 타입 → 자식 타입으로 변환하는 것
업캐스팅의 반대이며 명시적 캐스팅이 반드시 필요합니다.
Parent p = new Child(); // 업캐스팅
Child c = (Child) p; // 다운캐스팅
c.bye(); // 자식 메서드 사용 가능
특징
- 반드시 업캐스팅된 객체만 다운캐스팅 가능
- 자식 타입의 기능을 다시 사용해야 할 때 필요
3. 잘못된 다운캐스팅(주의!)
다운캐스팅은 “실제 생성된 객체가 자식 타입일 때만” 가능합니다.
Parent p = new Parent();
Child c = (Child) p; // ❌ 런타임 오류 (ClassCastException)
왜냐하면 p는 실제로 Parent 객체이며 Child 객체가 아니기 때문입니다.
4. 안전한 다운캐스팅: instanceof 사용
다운캐스팅 전에 instanceof로 실제 타입을 체크하면 안전하게 사용할 수 있습니다.
Parent p = new Child();
if (p instanceof Child) {
Child c = (Child) p;
c.bye();
}
장점
- ClassCastException 방지
- 다운캐스팅 전에 타입검사 가능
5. 전체 예제
class Parent {
void hello() {
System.out.println("Parent hello");
}
}
class Child extends Parent {
void hello() {
System.out.println("Child hello");
}
void bye() {
System.out.println("Child bye");
}
}
public class Main {
public static void main(String[] args) {
Parent p = new Child(); // 업캐스팅
p.hello(); // Child hello (오버라이딩)
if (p instanceof Child) {
Child c = (Child) p; // 다운캐스팅
c.bye(); // 자식 메서드 사용
}
}
}
출력:
Child hello
Child bye
설명
- 업캐스팅 후에도 오버라이딩된 메서드는 자식 메서드가 실행됨
- 다운캐스팅을 통해 자식만의 기능도 사용 가능
6. 정리
업캐스팅(Upcasting)
- 자식 → 부모
- 자동 형변환
- 부모 기능만 사용 가능
다운캐스팅(Downcasting)
- 부모 → 자식
- 명시적 형변환 필요
- 실제 객체가 자식 타입일 때만 가능
- instanceof로 안전하게 검사 가능
상속 관계에서 형변환은 다형성을 활용하는 핵심 개념이므로 반드시 이해해야 합니다.
반응형
'IT > Java' 카테고리의 다른 글
| [Java] 자식 클래스 호출 (0) | 2025.12.22 |
|---|---|
| [Java] 부모 생성자 호출 (super()) (0) | 2025.12.21 |
| [Java] 상속(Inheritance)과 오버라이딩(Overriding) (0) | 2025.12.21 |
| [Java] 상속, 부모클래스, 자식클래스 (0) | 2025.12.20 |
| [Java] 접근제어 (public, private, protected, default) (0) | 2025.12.20 |
Comments
