구조체 형태는 읽는 방식과 소유권 경계를 함께 정한다

세 형태는 모두 새 타입을 만든다. 필드 이름이 의미를 전달하는지, 타입 이름만 필요한지, 저장할 상태가 있는지부터 고른다.

이름 있는 필드

struct User { email: String }

user.email처럼 각 값의 이름이 읽기 계약일 때 선택한다.

튜플 구조체

struct Point(i32, i32);

필드 이름은 불필요하지만 같은 원시 튜플과 다른 명목 타입이 필요할 때 쓴다.

유사 유닛

struct AlwaysEqual;

저장 필드 없이 타입의 존재와 trait 구현 지점만 필요할 때 쓴다.

01 · DEFINE형태·필드 타입

타입이 허용할 상태를 정의

02 · INIT모든 필드 채움

순서는 자유, 누락·중복은 컴파일 오류

03 · SHORT동명 변수 축약

User { email, active }

04 · UPDATE나머지 재사용

..user1은 마지막, 비-Copy 필드는 이동

String

인스턴스가 데이터를 소유해 독립적으로 보관한다.

&'a str

외부 값을 빌리므로 구조체에도 라이프타임 관계가 필요하다.

Copy 필드

업데이트에서 복사된다. 이동된 필드가 있으면 원본 전체 재사용은 막힌다.

컴파일 진단: unknown·missing field는 정의와 생성식의 불일치, mismatched types는 필드 타입 오류, E0382는 구조체 업데이트 뒤 이동된 값을 다시 썼다는 신호다.