struct 는 데이터를 들고; impl 블록이 동작을 붙여. 여기서 self 파라미터 — 그리고 이미 아는 소유권 규칙 — 가 메서드 형태로 등장해.
impl 블록
메서드를 impl TypeName { ... } 안에 정의해. 메서드의 첫 파라미터는 self 형태고, 어느 형태를 고르느냐가 메서드가 인스턴스를 뭐 하는지 정확히 말해: 빌리거나, 수정하거나, 소비하거나.
세 가지 self
&self 는 읽으려고 인스턴스를 빌려 — 대부분 메서드의 기본값. &mut self 는 제자리 수정하려고 빌리고. 맨 self 는 인스턴스를 소비 해 (소유권 가져감), 메서드가 값을 다른 걸로 변형하고 원본이 살면 안 될 때 써. 배운 빌림 규칙이 직접 적용돼: &self 는 불변 borrow, &mut self 는 가변.
self 의 형태가 메서드의 계약이야.
&self = '읽을게.' &mut self = '너를 바꿀게.' self = '너를 소비할게.' 읽는 사람이 메서드 시그니처를 보고 receiver 에 뭘 하는지 즉시 알아 — 추측 없음.연관 함수
impl 블록 안에 self 가 없는 함수가 연관 함수 고, :: 로 호출해. 보편적 예가 생성자야: 관습상 fn new(...) -> Self 라 쓰고 Point::new(1, 2) 로 불러. Self (대문자 S) 는 impl 이 붙은 타입의 단축이야.