개주 훈련일지/📚 코살대 교본 학습

클래스 타입 변환

lshfood2 2025. 11. 10. 19:37

클래스의 타입 변환도 자료형 변환과 마찬가지로

자동 형 변환과 강제 형 변환이 있다.

 

단, 자료형에 비해 변환이 가능한 범위가 상당히 좁은데

서로 상속 관계에 있는 클래스 사이에서만 변환할 수 있다.

 

[클래스에서의 자동 타입 변환]

상속 관계에 있는 자식 클래스의 객체를

부모 타입의 객체로 변환하는 것을 말한다.

 

자식 클래스 객체 ▶ 부모 클래스 객체

2가지 경우가 있다.
1. 부모클래스(타입) 객체 변수 = new 자식 클래스();
//자식 클래스 객체를 만들면서 부모 클래스 객체 사용하는 경우
2. 부모 클래스(타입) 객체 변수 = 자식 객체;
//만들어진 자식 객체를 부모 타입으로 변환하는 경우

class Parent{}
class Child extends Parent{}

Parent p1 = new Parent();
//부모 객체 p1
Child c1 = new Child();
//자식 객체 c1

Parent p2 = new Child(); 
//1. 자식 생성자를 통해 부모 객체 생성
Parent p3 = c1;
//2. 만들어진 자식 객체를 부모 타입으로 변환

1,2 모두 자식 클래스 객체가 부모 클래스 객체로 자동형변환 된다.

쉬운 한글 풀이)

Car 클래스에 자식 클래스로 Bus 클래스가 있다면?

Bus는 Car라고 할 수 있지만, Car는 Bus라고 하기엔

범위가 좁아져 한정하여 정의할 수는 없다.


[클래스에서의 강제 타입 변환]

자바에서는 부모 타입이 자식 클래스의

멤버에 접근할 수 없으므로, 객체 c1 처럼

 

부모클래스로 자동 타입 변환이 된 객체의 경우

자식 클래스 멤버에 접근하려면 다시

자식타입으로 변환 되어야만 한다.

 

이를 '클래스 강제 타입 변환' 이라고 한다.

자동 타입 변환과는 달리, 개발자가 직접

명시해야만 타입 변환을 할 수 있다.

 

부모 타입에서 자식 타입으로 변환하려면

반드시 변환하고자 하는 타입 형태를

직접 작성해야 하는데, 예시를 통해 확인하자.

일회성 변환 필요 시
((자식타입) 부모타입).메서드();

여러 번 필요 시
자식 타입 변수에 담아서 사용
자식 타입 변수 = (자식 타입) 부모 타입;

Child kids = (Child) parent;
//자식 타입으로 강제 타입 변환
kids.punch();
//이로 인해 자식 클래스 메서드 사용 가능

 

단, 모든 부모 타입 객체를 자식 타입으로

변환할 수 있는 것은 아니다.

 

반드시 부모 타입으로 자동 타입 변환되었던

자식 객체를 다시 자식 타입으로 변환할 때만

강제 타입 변환을 사용할 수 있다.

(부모 ▶ 자식 X)

(자식 ▶ 부모 ▶ 자식 O)

 

'개주 훈련일지 > 📚 코살대 교본 학습' 카테고리의 다른 글

소프트웨어 개발 프로세스  (1) 2025.11.11
다형성 / instanceof / 오버로딩과 오버라이딩  (0) 2025.11.10
소프트웨어 생명주기  (0) 2025.11.10
상속  (0) 2025.11.08
생성자  (0) 2025.11.06