2023. 6. 7. 09:19ㆍLanguage/Rust
Rust에서 문자를 출력하기 위해서는 print!이나 println!을 사용합니다.
끝에 !(느낌표)가 붙는 것은 Rust 매크로 아래 글을 참고하시면 됩니다.
2023.03.11 - [Language/Rust] - Rust 매크로
[Rust 매크로
매크로란? Rust에서는 매크로를 지원합니다. 매크로는 메타 프로그래밍이라고 하는데, 내가 만든 Rust 코드가 새로운 Rust 코드를 만드는 것을 매크로라고 합니다. 대표적으로 우리가 많이 사용하
jandari91.tistory.com](https://jandari91.tistory.com/12)
화면에 출력하기 위해 println!()을 많이 사용하는데, 출력하기 위한 여러 포맷에 대해 알아봅시다.
std::fmt
std::fmt 모듈은 포맷 출력을 제어하는데 도움이 되는 다양한 기능들을 제공합니다.
std::fmt 모듈은 여러 가지 Trait을 제어하는데, 이를 통해 사용자 정의 데이터 타입의 포맷을 제어할 수 있습니다. 가장 많이 사용되는 Trait으로는 Disploy, Debug, LowerExp, UpperExp
등이 있습니다. 이러한 Trait을 구현하여 사용자 정의 데이터 타입을 출력 할 때 워하는 형식으로 출력할 수 있습니다.
Display Trait
우선 Display Trait을 구현해봅니다. 이 Trait을 구현하면 println! 매크로와 같은 포맷 출력 함수에서 사용자 정의 데이터 타입을 출력 할 수 있게 됩니다.
Display Trait 구현은 fmt 함수를 작성하는 것으로 이뤄집니다.
예를 들어 사용자 정의 구조체 Point2D를 출력하는 예제를 살펴보겠습니다.
use std::fmt::Display;
use std::fmt::Result;
use std::fmt::Formatter;
struct Point2D{
x:f64,
y:f64
}
impl Display for Point2D{
fn fmt(&self, f:&mut Formatter<'_>) -> Result {
write!(f, "({}, {})", self.x, self.y)
}
}
fn main() {
const point:Point2D = Point2D{
x:10.0,
y:-10.0,
};
println!("Point: {}", point);
}
위 예제에서 Point2D 구조체에 대해 Display Trait을 구현하였습니다.
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ rustc display.rs
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ ./display
Point: (10, -10)
Debug Trait 구현하기
Debug Trait을 구현하면 디버그용 출력에 사용자 정의 데이터 타입을 사용 할 수 있게 됩니다.
use std::fmt::Debug;
use std::fmt::Result;
use std::fmt::Formatter;
struct Point2D{
x:f64,
y:f64
}
impl Debug for Point2D{
fn fmt(&self, f:&mut Formatter<'_>) -> Result {
write!(f, "({}, {})", self.x, self.y)
}
}
fn main() {
const point:Point2D = Point2D{
x:10.0,
y:-10.0,
};
println!("Point: {:?}", point);
}
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ rustc debug.rs
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ ./debug
Point: (10, -10)
Debug Trait을 구현하면 println!("Point: {:?}", point);
와 같이 사용이 가능합니다.
println!("Point: {}", point);
와 같이 :?
를 빼게 되면 정상적으로 컴파일이 되지 않습니다.
LowerExp Trait 구현하기
LowerExp Trait은 소문자 e
를 사용하여 소수를 지수 형식으로 표현 할 수 있도록 합니다.
use std::fmt::LowerExp;
use std::fmt::Result;
use std::fmt::Formatter;
struct Point2D{
x:f64,
y:f64
}
impl LowerExp for Point2D{
fn fmt(&self, f:&mut Formatter<'_>) -> Result {
write!(f, "({:.2e}, {:.2e})", self.x, self.y)
}
}
fn main() {
const point:Point2D = Point2D{
x:12_345.6789,
y:-12_345.6789,
};
println!("Point: {:e}", point);
}
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ rustc lower-exp.rs
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ ./lower-exp
Point: (1.23e4, -1.23e4)
UpperExp Trait 구현하기
UpperExp Trait은 대문자 E
를 사용하여 소수를 지수 형식으로 표현 할 수 있도록 합니다.
use std::fmt::UpperExp;
use std::fmt::Result;
use std::fmt::Formatter;
struct Point2D{
x:f64,
y:f64
}
impl UpperExp for Point2D{
fn fmt(&self, f:&mut Formatter<'_>) -> Result {
write!(f, "({:.2E}, {:.2E})", self.x, self.y)
}
}
fn main() {
const point:Point2D = Point2D{
x:12_345.6789,
y:-12_345.6789,
};
println!("Point: {:E}", point);
}
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ rustc upper-exp.rs
bak@bak-Computer:~/Repository/BlogPosts/Rust/fmt$ ./upper-exp
Point: (1.23E4, -1.23E4)
소스코드
'Language > Rust' 카테고리의 다른 글
Rust의 HashMap 소개 (1) | 2023.06.15 |
---|---|
Rust Shuffle (0) | 2023.06.11 |
Rust에서 RabbitMQ 사용하기 (WorkQueue) (0) | 2023.06.03 |
if Let (1) | 2023.06.03 |
Rust의 Trait (0) | 2023.05.11 |