구조체는 보통 자기 데이터를 소유해. 근데 가끔 구조체가 참조를 들길 원할 때가 있어 — 그러는 순간 구조체는 lifetime 표기가 필요해.
빌리는 구조체
구조체 필드가 참조면, 구조체는 그 참조가 가리키는 것보다 오래 못 살아. 안 그러면 구조체가 dangling 참조를 들게 되니까 — borrow checker 가 금지하는 바로 그거. 그래서 구조체에 lifetime 을 표기해서, 구조체의 유효성을 빌린 데이터의 것에 묶어.
표기가 강제하는 것
'a 로 선언된 구조체는 그 참조가 빌린 데이터보다 오래 못 살아. 빌린 값이 drop 된 뒤에 구조체를 유지하려 하면 컴파일러가 거부해. 표기는 그 자체를 위한 장부질이 아니야 — 컴파일러가 '참조는 dangle 못 한다' 규칙을 네 타입을 통해 전파하는 거야.
빌릴 이유가 없으면 소유 필드를 선호해.
String 을 든 구조체는 자기 데이터를 소유하고 lifetime 골치가 없어. &str 을 든 구조체는 복사를 피하지만 빌린 출처에 자기를 묶어. 복사가 진짜 문제될 때만 빌린 필드로 손 뻗어.여기가 초보가 벽을 느끼는 곳
참조를 든 구조체가 lifetime 표기가 줄줄이 번지는 곳이야 — 빌린 필드 하나가 구조체에, impl 블록에, 필드를 반환하는 메서드에 lifetime 을 강제해. 일상 Rust 에서 가장 표기가 많은 구석이고, 정직한 조언은: 소유 필드로 시작하고, 프로파일링이 복사가 문제라고 말할 때만 빌림으로 손 뻗어.