개요
Affine type이란 프로그래밍 언어나 타입 시스템에서, 어떤 값이 최대 한 번만 사용될 수 있음을 보장하는 타입이다. 정확히 한번 사용해야 하는 Linear type과는 다르게, 최대 사용안하거나 1번 사용하는 것을 허용한다.
Affine type은 한번 사용된 type이 다시 사용되는 것을 막기 때문에 안전성을 컴파일 타임에 보장할 수 있다.
Rust에서 본직적으로 Copy를 사용하지 못하는 모든 타입은 Affine하다고 볼 수 있다. (E.g., Integer 혹은 Reference)
fn consume(x: String) {
println!("{}", x);
}
fn main() {
let s = String::from("hi");
consume(s); // 여기서 소유권 이동
// println!("{}", s); // ❌ 사용 불가 (affine 제약)
}