Search
🦀

260523_0709_println!

// 예제 01: Hello, World! + println! 포맷 완전 가이드 // 실행: cargo run --example 01_hello_world fn main() { // ── 기본 출력 ────────────────────────────────────────────── println!("Hello, World!"); println!("안녕, 러스트!"); // ── 변수 삽입 ────────────────────────────────────────────── let name = "Rust"; let version: f64 = 1.95; //: f64: 변수의 데이터 타입을 명시하는 부분입니다. f64는 64비트 부동소수점 실수(Floating-point number) 타입을 뜻하며, 소수점이 있는 숫자를 정밀하게 표현할 때 사용합니다. (Java나 C 언어의 double 타입과 같습니다.) println!("언어: {}, 버전: {}", name, version); // 이름 있는 파라미터 (가독성 향상) println!("지금 {lang}은 {ver} 버전입니다", lang = name, ver = version); // 인덱스로 재사용 println!("{0}은 구립니다! {0}를 배우지 마세요!", name); println!("\n=== 숫자 포맷 ==="); let n: i32 = 42; //데이터 타입을 지정하는 부분입니다. i32는 32비트 부호 있는 정수(Signed Integer)를 의미합니다. 음수와 양수를 모두 포함하며, 약 -21억부터 +21억까지의 정수를 표현할 수 있습니다. (C나 Java의 일반적인 int 타입과 같습니다.) let f: f64 = 3.14159265358979; // 정수 진법 변환 println!("10진수: {}", n); // 아래 주석들은 출력 값 입니다. println!(" 2진수: {:b}", n); // 101010 println!(" 8진수: {:o}", n); // 52 println!("16진수: {:x}", n); // 2a (소문자) println!("16진수: {:X}", n); // 2A (대문자) println!("16진수: {:#x}", n); // 0x2a (접두사 포함) println!(" 2진수: {:#b}", n); // 0b101010 // 폭과 정렬 // 아래는 출력 값 입니다. println!("|{:10}|", n); // | 42| (우측 정렬, 기본) println!("|{:<10}|", n); // |42 | (좌측 정렬) println!("|{:^10}|", n); // | 42 | (가운데 정렬) println!("|{:0>10}|", n); // |0000000042| (0으로 우측 패딩) println!("|{:*<10}|", n); // |42********| (*로 좌측 패딩) // 부동소수점 println!("{}", f); // 3.14159265358979 println!("{:.2}", f); // 3.14 println!("{:.4}", f); // 3.1416 println!("{:10.3}", f); // " 3.142" println!("{:e}", f); // 3.14159265358979e0 (과학 표기) println!("{:E}", f); // 3.14159265358979E0 (대문자) println!("\n=== 디버그 출력 ==="); let tuple = (1, "hello", 3.14); //튜플 (Tuple): 서로 다른 타입의 데이터를 하나로 묶을 때 사용합니다. 정수(1), 문자열("hello"), 실수(3.14)가 한 곳에 담겼습니다. 한 번 크기가 정해지면 늘리거나 줄일 수 없습니다. let array = [10, 20, 30, 40, 50]; //배열 (Array): 같은 타입의 데이터를 정해진 개수만큼 묶을 때 사용합니다.모두 정수형 데이터이며, 고정된 크기(여기서는 5개)를 가집니다. let vec = vec!["a", "b", "c"]; //벡터 (Vector): 배열처럼 같은 타입의 데이터를 묶지만, 크기가 고정되지 않고 런타임에 요소를 추가하거나 삭제할 수 있는 동적 배열입니다.vec!는 벡터를 쉽고 빠르게 만들기 위해 제공되는 Rust의 매크로입니다. println!("{:?}", tuple); // (1, "hello", 3.14) println!("{:?}", array); // [10, 20, 30, 40, 50] println!("{:?}", vec); // ["a", "b", "c"] //일반적인 {} 포맷터는 출력 형식이 지정된 기본 타입(정수, 문자열 등)만 출력할 수 있습니다. //튜플, 배열, 벡터처럼 복잡한 구조는 일반 출력이 불가능하므로, 개발자가 구조를 쉽게 확인할 수 있게 돕는 디버그 포맷터 {:?}를 사용해야 합니다. // Pretty-print (구조 들여쓰기) println!("{:#?}", vec); //{:#?}를 사용하면 데이터를 한 줄로 표현하지 않고, 구조별로 줄바꿈과 들여쓰기를 적용해 사람이 보기 편한 형태로 출력해 줍니다. /* 출력물은 아래와 같습니다. [ "a", "b", "c", ] */ println!("\n=== 특수 출력 ==="); // 이스케이프 println!("탭:\t끝"); println!("새줄:\n끝"); println!("역슬래시: \\"); println!("따옴표: \"안녕\""); println!("중괄호: {{리터럴}}"); // {} 자체 출력 // Unicode println!("유니코드: \u{1F600} \u{1F980}"); // 😀 🦀 println!("러스트 마스코트: 🦀"); println!("\n=== format! 과 다른 매크로 ==="); // format! — String 반환 let greeting = format!("안녕, {}! 버전 {:.1}", name, version); println!("포맷 문자열: {}", greeting); // print! — 개행 없음 print!("이 줄 끝에 개행 없음"); print!(" — 계속됨"); println!(); // 개행만 // eprint!, eprintln! — 표준 에러로 출력 eprintln!("이것은 표준 에러(stderr)로 출력됩니다"); }
Rust
복사

안녕하세요

관련 기술 문의와 R&D 공동 연구 사업 관련 문의는 “glory@keti.re.kr”로 연락 부탁드립니다.

Hello

For technical and business inquiries, please contact me at “glory@keti.re.kr”