[Rust 공식문서 한국어 정리] 103. Rust Debug 트레이트 가이드
[Rust 공식문서 한국어 정리] 103. Rust Debug 트레이트 가이드
원문 제목: Trait std::fmt::Debug
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Debug 트레이트가 제공하는 개발자용 디버깅 출력 메커니즘을 상세히 다룹니다.
#[derive(Debug)]의 자동 구현 동작과 한계를 학습합니다.
Debug 포맷의 다양한 형식인 {:?}, {:#?}, {:#x?} 등의 차이를 정리합니다.
커스텀 타입에 Debug를 수동 구현하여 출력을 세밀하게 제어하는 방법을 설명합니다.
Display와 Debug의 명확한 역할 분리와 사용 기준을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① fmt 메서드 — Formatter에 디버그 문자열 기록
② #[derive(Debug)] — 구조체 필드를 자동으로 디버그 포맷
③ {:?} — 한 줄 디버그 포맷, {:#?} — 예쁜 출력 포맷
④ debug_struct, debug_list 등 — 보조 메서드로 구조화된 출력
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Debug 트레이트는 타입을 개발자가 디버깅하기 적합한 형태로 포맷팅합니다.
#[derive(Debug)]를 사용하면 모든 필드가 Debug를 구현한 구조체에 자동으로 Debug가 구현됩니다.
{:?} 포맷은 한 줄로 모든 필드를 출력합니다.
{:#?} 포맷은 들여쓰기와 줄바꿈을 적용하여 읽기 쉬운 예쁜 출력을 제공합니다.
#[derive(Debug)]의 자동 구현은 필드 이름과 값을 struct Name { field: value } 형태로 출력합니다.
수동 구현 시 Formatter::debug_struct, debug_tuple, debug_list 등을 사용할 수 있습니다.
debug_struct는 구조체 형태의 출력을 생성하며 field 메서드로 필드를 추가합니다.
debug_list는 리스트 형태의 출력을 생성하며 entry 메서드로 요소를 추가합니다.
debug_map은 맵 형태의 출력을 생성하며 entry 메서드로 키-값 쌍을 추가합니다.
debug_set은 집합 형태의 출력을 생성합니다.
finish 메서드를 호출하여 출력을 완료합니다.
Debug는 Display와 달리 내부 상태를 투명하게 노출하는 것이 원칙입니다.
assert_eq! 매크로는 Debug를 사용하여 실패 시 두 값의 차이를 출력합니다.
unwrap(), expect() 실패 시에도 Debug 포맷으로 값이 표시될 수 있습니다.
포맷 문자열의 ? 플래그 없이 {}로 Debug를 호출할 수 없습니다.
보안상 민감한 데이터는 Debug 구현을 의도적으로 생략하거나 마스킹할 수 있습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
모든 공개 타입에 #[derive(Debug)]를 붙여 디버깅을 용이하게 합니다.
{:#?}를 사용하여 복잡한 중첩 구조체를 가독성 있게 출력합니다.
수동 Debug 구현으로 민감한 필드를 마스킹하거나 생략합니다.
assert_eq!와 dbg! 매크로로 개발 중 빠른 디버깅 정보를 얻습니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Debug는 개발자를 위한 타입의 투명한 문자열 표현을 제공합니다.
#[derive(Debug)]로 대부분의 디버깅 출력을 자동화할 수 있습니다.
Display와 역할을 명확히 분리하여 사용자용과 개발자용 출력을 구분합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/fmt/trait.Debug.html
dbg! macro: https://doc.rust-lang.org/std/macro.dbg.html
#Rust #Debug #디버깅 #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30