비교자 계약

비교 함수는 정답 배열보다 순서 계약이 먼저다

`cmp_to_key`나 직접 비교 함수를 쓰면 정렬 라이브러리가 믿을 수 있는 규칙을 제공해야 합니다. 동점, 결측치, 숫자 문자열을 같은 계약 안에서 검사하면 실행 환경별 흔들림을 줄일 수 있습니다.

A

반대 방향이 일치한다

`a < b`이면 같은 순간 `b < a`가 참이면 안 됩니다.

T

추이성이 깨지지 않는다

`a < b`, `b < c`라면 `a < c`도 같은 규칙으로 성립해야 합니다.

E

동점은 같은 결과를 낸다

같은 키를 비교할 때는 0 또는 동일 키 처리로 결과가 흔들리지 않아야 합니다.

학생 정렬

동점 그룹 고정

`score=90`인 학생 여러 명을 넣고 `joined` 오름차순이 항상 같은지 봅니다.

key = (-score, joined, name)
숫자 문자열

문자 비교를 숫자로 바꾼다

`"10"`과 `"2"`를 문자열 그대로 비교하면 의도와 다른 순서가 됩니다.

int("10") > int("2")

결측치 위치

`None`과 공백을 맨 앞이나 맨 뒤 중 어디로 보낼지 정한다.

대소문자 처리

표시용 이름과 비교용 정규화 키를 분리하면 결과가 안정적이다.

locale 기준

한글과 영문이 섞이면 언어권별 정렬 규칙을 요구사항에 남긴다.

캐시 무효화

정렬 기준이 바뀌면 저장된 결과를 다시 만들 조건도 같이 정한다.