Menu
Coddy logo textTech

트레이트란 무엇인가요?

Coddy Rust 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 29번째.

제네릭을 사용하면 어떤 타입과도 작동하는 코드를 작성할 수 있지만, 때로는 타입이 특정 작업을 수행할 수 있음을 보장해야 합니다. 이때 trait가 사용됩니다.

trait는 type이 구현해야 하는 method 집합을 정의합니다. 이를 계약이라고 생각해 보세요. 이 계약에 "서명하는" 모든 type은 지정된 동작을 제공할 것을 약속합니다. 다른 언어에서 인터페이스를 사용해 본 적이 있다면, trait도 비슷한 역할을 합니다.

trait을 정의하는 방법은 다음과 같습니다:

trait Describable {
    fn describe(&self) -> String;
}

trait 키워드는 trait를 도입하며, 그 뒤에 이름이 옵니다. 중괄호 안에서는 본문 없이 이름, 매개변수 및 반환 형식만 포함된 method signature를 declare합니다. signature 뒤의 세미콜론은 이것이 구현이 아니라 요구 사항임을 나타냅니다.

Describable trait는 다음과 같이 말합니다. "나를 구현하는 모든 타입 that 자기 자신에 대한 참조를 받고 String을 반환하는 describe method를 제공해야 합니다." 이 trait는 method가 어떻게 작동하는지는 신경 쓰지 않습니다. 그것은 이를 구현하는 각 타입에 달려 있습니다.

여러 서로 다른 타입이 동일한 trait를 구현할 때 trait는 강력해집니다. Book, Car, Person은 모두 Describable일 수 있으며, 각각 고유한 설명을 제공합니다. trait는 이들이 모두 이 공통 기능을 공유하도록 보장합니다.

challenge icon

챌린지

쉬움

첫 번째 trait를 정의해 봅시다! trait는 계약을 설정합니다. 즉, 이를 구현하는 모든 타입이 특정 동작을 제공한다는 약속입니다. 여러 타입이 자신에 대한 요약을 제공하도록 구현할 수 있는 Summarizable trait를 만들 것입니다.

코드를 두 개의 파일로 구성합니다.

  • summary.rs: Summarizable이라는 public trait를 Define하고, single method signature인 summarize(&self) -> String을 포함합니다. Remember, trait definition에서는 세미콜론을 사용하여 method signature만 declare합니다. 본문은 없습니다. 이는 Rust에 "이 trait를 구현하는 모든 타입은 summarize method를 제공해야 하며, 이 method는 String을 반환해야 한다"는 것을 알려 줍니다.
  • main.rs: summary module을 가져오고, trait가 정의되었음을 확인하는 message를 출력합니다. 아직 trait를 구현하는 방법을 배우지 않았으므로(그 내용은 다음 lesson에서 다룹니다!), trait가 올바르게 컴파일되는지만 확인합니다.

main 파일에서 다음 message를 출력하여 trait definition이 유효한지 확인합니다.

Summarizable trait defined successfully!

이 challenge는 trait definition 구문에만 초점을 맞춥니다. 즉, trait keyword, trait 이름, 그리고 구현 없이 method signature를 declare하는 방법을 다룹니다. 다음 lesson에서는 struct가 이 trait를 구현하도록 만드는 방법을 배웁니다!

직접 해보기

mod summary;

fn main() {
    // TODO: 트레이트가 정의되었다는 확인 메시지를 출력하세요
    // Expected output: "Summarizable trait defined successfully!"
    
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Rust 컴파일러