Rust · advanced types

고급 타입 선택 매트릭스

이름을 새 타입으로 만들지, 별칭으로 줄일지, 반환하지 않는 흐름인지, 포인터 뒤의 동적 크기 값인지 먼저 구분합니다.

안전성 가독성 크기

뉴타입

struct

같은 내부 값이라도 섞이면 안 되는 의미를 컴파일러가 구분하게 합니다.

사용 기준

단위, ID, 공개 API 캡슐화처럼 새 타입 경계가 필요할 때.

타입 별칭

type

기존 타입에 짧고 의미 있는 이름을 붙이지만 새 타입은 아닙니다.

사용 기준

긴 시그니처나 Result 반복을 줄이고 같은 타입으로 다뤄도 될 때.

never type

!

값을 만들 수 없고, continue, panic, 무한 loop처럼 반환하지 않습니다.

사용 기준

어떤 분기가 끝까지 값을 내지 않아 다른 타입으로 강제될 때.

DST와 trait object

?Sized

str이나 dyn Trait처럼 크기가 런타임 정보와 함께 결정됩니다.

사용 기준

&str, Box<dyn Trait>처럼 포인터와 메타데이터가 필요할 때.

결정 흐름

의미를 분리?

값 혼용을 막아야 하면 뉴타입.

반복을 축약?

같은 타입이면 타입 별칭.

반환하지 않음?

분기가 끝나지 않으면 !.

크기 미정?

포인터 뒤에 DST를 둡니다.

제네릭 완화?

참조와 T: ?Sized를 함께 씁니다.

핵심 구분은 새 타입 경계가 필요한지, 이름만 줄이면 되는지, 값이 반환되지 않는지, 크기 정보를 포인터가 들고 가야 하는지입니다.