[Basic C++] #9_객체의 업캐스팅과 다운캐스팅, 슬라이싱
C++ 개발에서 객체의 업캐스팅과 다운캐스팅 방법과 특징들에대해 알아보겠습니다.
"전문가를 위한 C"의 9 항목, "클래스 상속 활용 테크닉"에 해당하는 내용입니다.
객체의 업캐스팅(up-casting), 슬라이싱
Sub mySub;
Super mySuper = mySub; // 업캐스팅, 슬라이싱 발생!
Super& mySuper = mySub; // 업캐스팅, 슬라이싱 미 발생!
업캐스팅이란, 상위 혹은 부모 클래스로 타입 캐스팅 하는 것을 의미합니다.
이때, 객체는 부모 클래스로 업캐스팅 되거나 부모 클래스의 객체에 대입할 수 있습니다.
이 과정에서, 캐스팅 혹은 대입이 일어나면서 자식 클래스만 갖는 특징들이 사라집니다.
이러한 현상을 "슬라이싱"이라고 합니다.
슬라이싱 발생을 방지하기위해 포인터 또는 참조를 이용합니다.
객체의 다운캐스팅(down-casting)
void donwCasting(Super* mySuper)
{
Sub* mySub = dynamic_cast<Sub*>(mySuper);
if(mySub != nullptr)
{
// mySub를 통해 super 클래스의 멤버에 접근
}
}
다운캐스팅이란, 상위 클래스의 객체를 그보다 하위 클래스로 타입 캐스팅하는 것을 의미합니다.
다운 캐스팅의 경우, 잘 사용되지 않으며, 컴파일 타임에 검증이 되지 않는 동작으로, 큰 문제가 될 수 있습니다.
만약 필요하다면, dynamic_cast를 통해 런타임에 적합성을 검사하고, 문제가 발생하면 캐스팅 거부와 에러 메세지를 출력하도록 합시다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #11 생성자의 상속 (0) | 2022.03.18 |
---|---|
[Basic C++] #10 오버라이드 키워드, override (0) | 2022.03.17 |
[Basic C++] #8 파생 클래스와 베이스 클래스의 연동, 생성 순서, 생성자 체이닝, 캐스팅 (0) | 2022.03.16 |
[Basic C++] #7 클래스 상속 활용 방법 (0) | 2022.03.10 |
[Basic C++] #6_오버라이딩과 오버로딩의 차이점 (0) | 2022.03.07 |