해시맵에 넣는 순간 누가 값을 소유하는지 결정된다
소유 값을 삽입하면 맵이 새 소유자가 되고, 참조를 삽입하면 원본의
생존 시간이 맵 사용 시간보다 길어야 한다.
키
조회 기준이며 같은 타입으로 통일된다.
값
키와 함께 저장되며 타입은 모든 항목에서 같아야 한다.
수명
소유 삽입은 맵이 책임지고, 참조 삽입은 원본이 책임진다.
Owned Values
String을 넣으면 맵으로 이동
insert(field_name, field_value)
삽입 후 원래 변수는 더 이상 사용할 수 없다.
맵이 드롭될 때 함께 정리
값의 소유권이 맵 안으로 옮겨졌기 때문이다.
Borrowed Values
참조를 넣으면 원본 생존이 계약
insert(&name, &value)
맵은 빌려온 주소를 담을 뿐 값을 소유하지 않는다.
원본이 먼저 사라지면 불가능
라이프타임 검사가 이 위험을 막는다.
| 삽입 방식 | 삽입 후 원본 | 선택 기준 |
|---|---|---|
| 소유 값 | 이동되어 사용할 수 없다. | 맵이 데이터를 오래 들고 있어야 할 때 안전하다. |
| Copy 값 | 복사본이 들어가므로 원본도 계속 쓸 수 있다. | 숫자처럼 작고 복사 가능한 값에 자연스럽다. |
| 참조 값 | 원본이 계속 살아 있어야 한다. | 맵이 원본보다 짧게 쓰일 때만 적합하다. |
타입 통일
모든 키는 같은 타입, 모든 값도 같은 타입이어야 한다.
소유권 확인
삽입 뒤에도 원본을 써야 한다면 참조나 복사를 검토한다.
라이프타임 확인
참조를 저장하면 원본이 맵 사용 기간을 덮어야 한다.