트레이트
러스트에서는 공통된 동작을 구현할 때 트레이트를 사용한다. 트레이트는 대략적으로 다른 언어의 인터페이스에 비유할 수 있다. 대신 러스트에서는 사용자 본인이 정의하지 않은 타입에도 트레이트를 구현할 수 있다.
트레이트를 사용하여 애플리케이션에서 둘 이상의 타입에 공통으로 필요한 동작을 만들 수 있다. 트레이트를 써서 동작을 표준화할 수도 있다. 예를 들어 (표준 라이브러리의 ToString 트레이트를 사용했던 것처럼) 한 타입을 다른 타입으로 변환할 때 트레이트를 사용할 수 있다.
트레이트의 또 다른 장점은 타입을 다른 맥락에서도 사용할 수 있다는 점이다. 특정 방식으로 동작하는 모든 타입을 허용하는 제네릭 형태로 러스트 프로그램을 작성할 수 있다.
이런 식당을 상상해 보라. 이 식당에서는 테이블 아래에 들어갈 수 있으며 물을 마실 수 있는 모든 동물을 받아준다. 러스트 프로그램의 함수는 이 식당에 비유할 수 있다. 우리가 만든 함수에서 특정 트레이트를 가진 타입을 반환할 수 있다고 하자. 어떤 타입이 그 트레이트를 구현하기만 하면 해당 함수에서 반환할 수 있다.
예를 들어 사용자 정의 구조체를 콘솔에 출력하고 싶다면 러스트에서 트레이트를 사용해 신속하게 구현할 수 있다(컴파일 시간 동안 모든 수동 트레이트 구현을 작성해 주는 derive 매크로를 이용하면 된다).