Rust lifetime과 trait

2018년 11월 23일에 씀

러스트에서 값으로 존재하는 것은 크기가 알려진 타입들만 가능하다. struct, enum, primitive 등의 타입들은 스택에서의 크기가 정해져있다. 반면 trait은 타입의 조건만을 명시하므로 trait의 타입의 값의 크기를 실행하기 전까지 알 수 없다. 따라서 trait타입의 값은 rust에 존재하지 않는다.

trait을 다루려면 레퍼런스를 사용하거나 generic을 사용하여야한다.

// 컴파일 되지 않음
let s: String = "This is a string".to_string();
let x: Display = s;
// 잘 동작함
let s : String = "This is a string".to_string();
let x: &Display = s;

Rust의 다른 레퍼런스를인 Box, Rc, Arc, Cell, RefCell도 레퍼런스와 마찬가지로 trait을 담고있을 수 있다.