79
1
장
타입
전에 먼저 원하는 기능을 제공하는 크레이트(예:
derive
_
builder
)가 나와 있는지부터 확인
해야 한다. 물론 그로 인해 발생하는 의존성을 감당해야 한다 (아이템
25
).
아이템
8
: 레퍼런스와 포인터 타입에 익숙해져라
프로그래밍에서 흔히 말하는
레퍼런스 (참조 )
reference
란 어떤 데이터 구조를 직접 소유한 변수
를 사용하지 않고 그 데이터 구조에 간접적으로 접근하는 수단이다. 레퍼런스는 대체로 포인
터
pointer
로 구현한다. 포인터는 데이터 구조의 메모리 주소를 값으로 갖는다.
최신
CPU
는 대부분 포인터에 몇 가지 제약 조건을 적용한다. 가령 메모리 주소는 가상 또는
실제 메모리 범위 안에 있어야 하고, 정렬
align
돼야 한다. 예를 들어
4
바이트 정숫값에 접근하려
면 주소가
4
의 배수여야 한다.
그런데 고수준 프로그래밍 언어는 포인터에 대한 정보를 타입 시스템으로 인코딩하는 경향이
있다. 러스트를 비롯한
C
기반 언어에서 제공하는 포인터는 자신이 가리키는 메모리 주소 지점
에 나올 수 있는 데이터 구조의 타입 정보도 담고 있다. 따라서 포인터를 통해 주소가 가리키는
메모리 공간에 담긴 내용뿐만 아니라, 그다음 지점에 담긴 내용도 해석할 수 있다.
이런 기본적인 포인터 정보(예상 메모리 위치와 데이터 구조 레이아웃)를 러스트에서는
원시
포인터
raw
pointer
라고 표현한다. 하지만 안전한 러스트 코드라면 원시 포인터를 사용하지 않고,
안전 보장과 제약 조건이 강화된 포인터와 레퍼런스를 사용한다.