Menu
Coddy logo textTech

Display 트레이트

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

Debug는 개발자가 데이터를 검사할 때 유용하지만, Display trait는 사용자에게 표시되는 출력을 위해 설계되었습니다. println!에서 {} formatter를 작동하게 하는 것이 바로 Display입니다. Debug와 달리 Rust는 Display를 자동으로 derive할 수 없습니다. 직접 수동으로 구현해야 합니다.

Display를 구현하려면 fmt 모듈을 가져오고 fmt 메서드를 구현해야 합니다:

use std::fmt;

struct Temperature {
    celsius: f64,
}

impl fmt::Display for Temperature {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "{}°C", self.celsius)
    }
}

fmt 메서드는 Formatter를 받아 fmt::Result를 반환합니다. 출력의 형식을 지정하기 위해 write! macro를 사용하고, self를 통해 struct의 fields에 접근합니다.

이제 표준 {} formatter를 사용하여 struct를 출력할 수 있습니다:

let temp = Temperature { celsius: 23.5 };
println!("{}", temp);  // 23.5°C

핵심적인 차이점은 다음과 같습니다. Debug 출력은 데이터의 구조를 보여 주므로 디버깅에 유용하고, Display 출력은 깔끔하게 다듬어져 최종 사용자를 위한 것입니다. 하나의 struct는 두 가지 모두를 구현할 수 있습니다. 디버깅에는 {:?}를 사용하고, 깔끔한 출력에는 {}를 사용하세요.

challenge icon

챌린지

쉬움

사용자 친화적인 제품 표시 시스템을 만들어 봅시다! Debug가 데이터의 원시 구조를 보여 주는 반면, Display trait를 사용하면 최종 사용자를 위해 적합한 세련되고 사람이 읽기 쉬운 출력을 만들 수 있습니다.

코드를 두 파일에 나누어 구성합니다.

  • product.rs: 두 개의 public fields인 name(String)과 price(f64)를 가진 public Product struct를 Define합니다. struct에 Display trait를 Implement하여 {name} - ${price} 형식으로 출력되도록 합니다. std::fmt를 가져오고 fmt method 내부에서 write! macro를 using하는 것을 잊지 마세요.
  • main.rs: product module을 가져오고 제공된 입력을 사용하여 Product instance를 만듭니다. 표준 {} formatter를 사용하여 product를 Print하고 사용자 지정 표시 출력을 보여 줍니다.

Display trait를 사용하려면 fmt method를 수동으로 Implement해야 합니다. Rust는 Debug처럼 이를 자동으로 derive할 수 없습니다. 따라서 type이 사용자에게 표시되는 방식을 완전히 제어할 수 있습니다.

출력에는 product가 깔끔하고 사용자 친화적인 형식으로 표시되어야 합니다.

{name} - ${price}

예를 들어 입력이 Wireless Mouse29.99인 경우:

Wireless Mouse - $29.99

두 개의 입력을 받습니다. product name과 price이며, price는 f64로 parse합니다.

REQUIRED OUTPUT FORMAT: [Your translated content here]

직접 해보기

mod product;

use product::Product;

fn main() {
    let mut name = String::new();
    std::io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();

    let mut price_input = String::new();
    std::io::stdin().read_line(&mut price_input).expect("Failed to read line");
    let price: f64 = price_input.trim().parse().expect("Failed to parse price");

    // TODO: name과 price로 Product 인스턴스 생성

    // TODO: {} 포맷터를 사용하여 product 출력
}
quiz icon실력 점검

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

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

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