[Rust] 타입을 println!에 들어가게 만들어보기

println는 Display 트레잇을 구현한 타입만을 받도록 정의돼있다.
이제까지 쓴 정수나 문자열 등도 전부 저걸 구현하고 있었던 것이다...

먼저 이름과 나이를 갖는 간단한 타입 Person을 정의했다.
struct Person
{
     name: String,
     age: i32
}

이에 대한 Display를 구현해보자.

Display에는 fmt라는 메서드가 하나 있다.
이 메서드에선 포매터를 받아다가 그 write 매크로로 포매터에 출력할 문자열을 쓰고 반환한다.

impl std::fmt::Display for Person
{
fn fmt(&self, formatter:&mut std::fmt::Formatter)->std::fmt::Result
    {
          write!(formatter, "이름:{} 나이:{}", self.name, self.age)
     }
}

println에서 내부적으로 포매터를 보내고 결과값을 받아다 출력문에 이어붙이는듯하다.

그럼 이제 출력이 잘 될 것이다.
fn main()
{
let john =
 ㅤPerson{name:"john".to_string(), age:23};

println!("{}",john);
}


image

image


참고
https://doc.rust-lang.org/std/fmt/trait.Display.html