impl 구조
메서드는 인스턴스 동작, 연관 함수는 타입의 기능을 표현한다
impl 블록은 구조체에 동작을 붙이는 공간이다. self를 받으면 인스턴스 메서드이고, 받지 않으면 타입 이름으로 호출하는 연관 함수다.
self
인스턴스 데이터를 읽거나 바꾸는 메서드다.
Self
생성자처럼 타입 자체에 묶인 함수를 표현한다.
impl
여러 블록으로 나눌 수 있지만 책임 기준이 있어야 읽기 쉽다.
struct
데이터 이름 붙이기
width와 height처럼 관련 값을 하나의 타입으로 묶는다.
method
self로 값 읽기
area와 can_hold는 Rectangle 인스턴스의 데이터를 사용한다.
assoc fn
타입에 묶인 기능
square처럼 인스턴스 없이 새 값을 만드는 함수에 적합하다.
multi impl
동작 묶음 분리
제네릭이나 트레이트 경계가 생기면 블록을 나눌 이유가 생긴다.
형태 호출 방식 읽는 기준
메서드 value.method() self를 받아 인스턴스의 상태나 의미를 사용한다.
연관 함수 Type::function() 인스턴스 없이 타입에 속한 기능을 제공한다.
여러 impl 같은 타입에 블록을 여러 개 둔다. 책임, 제네릭 조건, 트레이트 경계가 분리될 때 유용하다.
self 확인
self가 있으면 값이 이미 존재해야 호출할 수 있다.
생성자는 타입에
새 인스턴스를 만드는 함수는 보통 연관 함수로 둔다.
블록 분리 기준
나눌 이유가 없다면 한 블록도 충분하고, 조건이 다르면 나눌 수 있다.