[Rust 공식문서 한국어 정리] 105. Rust PartialOrd/Ord 트레이트 가이드
[Rust 공식문서 한국어 정리] 105. Rust PartialOrd/Ord 트레이트 가이드
원문 제목: Trait std::cmp::PartialOrd
작성자: The Rust Project
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PartialOrd와 Ord 트레이트가 제공하는 순서 비교 메커니즘을 상세히 다룹니다.
부분 순서와 전체 순서의 차이, 수학적 의미를 학습합니다.
부동소수점이 PartialOrd만 구현하는 이유와 NaN의 비교 동작을 정리합니다.
정렬, 이진 검색, 우선순위 큐 등에서 Ord가 요구되는 이유를 설명합니다.
cmp, partial_cmp, min, max 등 관련 메서드와 매크로의 활용법을 다룹니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① PartialOrd — 부분 순서 비교(비교 불가능한 값 허용)
② Ord — 전체 순서 비교(모든 값 쌍이 비교 가능)
③ partial_cmp — Less, Equal, Greater, None 중 하나 반환
④ cmp — Less, Equal, Greater 중 하나 반환(항상 비교 가능)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PartialOrd 트레이트는 값 간의 순서를 비교하는 기능을 제공합니다.
partial_cmp 메서드는 Option을 반환하며 비교가 불가능하면 None을 반환합니다.
Ord는 PartialOrd를 상속하며 cmp 메서드는 항상 Ordering을 반환합니다.
부동소수점 f32와 f64는 NaN이 어떤 값과도 비교할 수 없으므로 PartialOrd만 구현합니다.
NaN == NaN은 false이고 NaN < x, NaN > x도 모두 false입니다.
따라서 f32의 partial_cmp는 NaN이 포함될 때 None을 반환할 수 있습니다.
Ord는 모든 값 쌍이 비교 가능하여 정렬 알고리즘의 전제 조건이 됩니다.
BTreeMap, BTreeSet의 키는 Ord를 구현해야 합니다.
BinaryHeap의 요소도 Ord를 구현해야 합니다.
#[derive(PartialOrd, Ord)]로 두 트레이트를 자동 구현할 수 있습니다.
자동 구현은 필드 순서대로 사전순 비교를 수행합니다.
lt, le, gt, ge 메서드는 partial_cmp의 결과를 bool로 변환합니다.
max, min 메서드는 두 값 중 큰 값과 작은 값을 반환합니다.
clamp 메서드는 값을 주어진 범위로 제한합니다.
Ord를 수동 구현할 때는 일관성이 필수적입니다.
a == b이면 a.cmp(b) == Equal이어야 하며 a < b이면 b > a여야 합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
정렬이 필요한 컬렉션의 키로 사용할 타입에 Ord를 구현합니다.
#[derive(PartialOrd, Ord)]로 필드 기반 사전순 비교를 자동 생성합니다.
부동소수점을 포함한 타입은 PartialOrd만 구현하고 정렬 시 주의합니다.
clamp로 사용자 입력을 유효 범위로 제한합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PartialOrd는 부분 순서, Ord는 전체 순서를 표현합니다.
부동소수점의 NaN 때문에 PartialOrd와 Ord가 분리되어 있습니다.
정렬과 검색 자료구조는 Ord를 요구하며 자동 구현으로 대부분 충족됩니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html
Ord Trait: https://doc.rust-lang.org/std/cmp/trait.Ord.html
#Rust #PartialOrd #Ord #순서비교 #번역

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