크기를 알 수 없는 타입
List가 직접 List를 담으면 무한 크기입니다.
Box<List>는 포인터 크기로 재귀를 끊습니다.
값은 힙에 두고 스택에는 고정 크기 포인터를 두면, 큰 값 이동과 재귀 타입의 크기 계산 문제를 같은 원리로 다룰 수 있습니다.
List가 직접 List를 담으면 무한 크기입니다.
Box<List>는 포인터 크기로 재귀를 끊습니다.
소유권을 옮길 때 실제 값 전체가 아니라 힙 주소를 담은 작은 핸들만 이동합니다.
값을 소유하되 구체 타입보다 특정 트레이트 구현 여부만 중요할 때 트레이트 객체와 함께 쓰입니다.
Cons(i32, List)
컴파일러가 다음 List의 크기를 다시 묻습니다.
i32 + List + ...
배리언트 크기가 끝나지 않아 E0072가 납니다.
Cons(i32, Box<List>)
다음 값은 힙에 있고 현재 값은 포인터만 갖습니다.
i32 + pointer
모든 Cons가 같은 고정 크기로 표현됩니다.
Box<T>는 단일 소유자 모델입니다. 여러 소유자가 필요하면
Rc<T>, 불변 값 내부 변경이 필요하면
RefCell<T>를 검토합니다.