
217
3
장
주요 개념
●
is::<T>()
: 트레이트 객체 타입이 특정 타입
T
와 같은지 여부를 나타낸다.
●
downcast_ref::<T>()
: 트레이트 객체가
T
타입이라면, 구체적인 타입
T
에 대한 레퍼런스를 반환한다.
●
downcast_mut::<T>()
: 트레이트 객체가
T
타입이라면, 구체적인 타입
T
에 대한 가변 레퍼런스를 반
환한다.
Any
트레이트는 어디까지나 리플렉션과 비슷할 뿐이다. 어떤 객체의 컴파일 타임 타입과 위치
를 추적하는 대상 (
&
dyn
Any
)을 명시적으로 빌드할지 여부를 컴파일 타임에 프로그래머가 선
택해야 한다. 본래 타입으로 되돌리는 다운캐스팅
downcasting
같은 기능은
Any
트레이트 객체를
빌드한 경우에만 가능하다.
러스트에서는 객체의 컴파일 타임 타입과 런타임 타입이 다른 경우가 드물다. 그중에서도 특히
트레이트 객체가 그렇다. 구체적인 타입이
Square
인 객체는 그 타입이 구현하는 트레이트에
대해 트레이트 객체인
dyn
Shape
으로 강제 변환될 수 있다. 그러면 객체만 가리키던 단순 포
인터로부터 객체와
vtable
로 구성된 팻 포인터가 만들어진다.
아이템
12
에서 설명한 것처럼 러스트의 트레이트 객체는 객체 지향적이지 않다.
Square
는
Shape
의 한 종류, 즉
is
-
a
관계가 아니다.
Square ...