형식을 지정하는 출력

러스트에서 출력 관련 기능은 std::fmt에 정의된 몇개의 macro로 처리합니다.

  • format!: 형식 지정 문자열을 String 에 출력합니다.
  • print!: format! 과 동일하지만, 출력을 콘솔 (io::stdout) 에 합니다.
  • println!: print! 과 동일하지만, 개행 문자를 덧붙여줍니다.
  • eprint!: format! 과 동일하지만, 표준 오류 스트림 (io::stderr) 에 출력합니다.
  • eprintln!: eprint!과 동일하지만, 개행 문자를 덧붙여줍니다.

이들은 모두 동일한 형식 지정자를 사용합니다. 러스트는 컴파일 시점에 형식 지정이 올바른지 여부도 검사합니다.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

std::fmt 에는 문자열 출력에 관련된 많은 트레잇(traits) 이 있습니다. 다음은 두개의 중요한 트레잇입니다.

  • fmt::Debug: {:?} 에 사용됩니다. 디버깅에 사용합니다.
  • fmt::Display: {} 를 사용됩니다. 보기 편하게 출력 형식을 지정하는데 사용합니다.

위의 예제에서는 표준 라이브러리가 지원하는 자료형들을 출력했기 때문에 fmt::Display를 사용했습니다. 사용자 정의 자료형을 위해서는 추가 작업이 필요합니다.

만약 fmt::Display 트레잇을 구현해주면 자동으로 ToString 트레잇이 구현되고, 해당 자료형을 String으로 변환(convert) 할 수 있게됩니다.

Activities

  • 위 코드에서 두 개의 이슈(FIXME 라고 된 부분들)를 수정하고 오류없이 실행되게 해보세요.
  • println! 매크로의 소수점 표시 기능을 이용해서 원주율의 근사치는 3.142이다. 를 출력해보세요. 위한 파이값은 let pi = 3.141592 라고 정의해주세요. (힌트: std::fmt 문서에서 소수점 표시(Precision) 항목을 참고하세요.)

참고:

std::fmt, 매크로(macros), 구조체(struct), 트레잇(traits)