
64
이펙티브 러스트
●
배열을 슬라이스로 변환한다.
●
(구체적인 항목이 구현하는 트레이트에 대해 ) 구체적인 항목을 트레이트 객체로 변환한다.
●
수명이 ‘더 짧은’ 항목으로 변환한다(아이템
14
).
26
사용자 정의 타입에 의해 동작이 영향을 받을 수 있는 강제 변환은 두 가지뿐이다. 하나는 사용
자 정의 타입이
Deref
나
DerefMut
트레이트를 구현하는 경우이고, 다른 하나는 구체적인 항
목이 트레이트 객체로 변환되는 경우다.
첫 번째 강제 변환의 경우 사용자 정의 타입이 일종의 스마트 포인터 역할을 한다(아이템
8
).
이때 컴파일러는 스마트 포인터 항목에 대한 레퍼런스를 (
Target
이 가리키는 ) 스마트 포인터
가 포함하는 타입의 항목에 대한 레퍼런스로 강제 변환한다.
두 번째 강제 변환은 구체적인 항목을 트레이트 객체로 변환할 때 해당 항목에 대한
팻 포인터
fat
pointer
를 생성한다. 그 이유는 해당 항목의 메모리 위치에 대한 포인터뿐만 아니라, 해당 트레이트
의 구체적인 타입에 대한 구현을 위한
vtable
에 대한 포인터도 포함하기 때문이다(아이템
8
).
아이템
6
: 뉴타입 패턴을 적극 활용하라
아이템
1
에서 설명했듯이 튜플 구조체의 필드에 이름을 붙일 수는 없고 번호로 참조해야 한
다(예:
self
.
0
). 이번 아이템에서는 튜플 구조체