가나다순 정렬의 기준 - 국어사전과 컴퓨터 정렬의 차이
국어사전의 가나다순 정렬 기준과 컴퓨터 유니코드 정렬이 다른 이유, 그리고 한국어 데이터를 올바르게 정렬하는 방법을 설명합니다.
Q.컴퓨터에서 한국어를 가나다순으로 올바르게 정렬하려면 어떻게 해야 하나요?
컴퓨터 기본 정렬(유니코드 코드포인트 순서)은 대부분의 경우 가나다순과 일치하지만, 대소문자 혼재, 특수문자 포함, 한자 혼용 시 예상과 다를 수 있습니다. Python에서는 `sorted(list, key=lambda x: x)` 기본 정렬이 유니코드 순서로 동작하며, 국어사전식 정렬이 필요하면 PyICU 또는 locale 모듈을 사용합니다.
엑셀에서 한국어 이름 목록을 가나다순으로 정렬했더니 "강민준"이 "가영수"보다 앞에 나왔다. 틀린 게 아닐까 의심스럽다. 실은 정렬 기준의 차이에서 비롯된 결과다.
국어사전식 가나다순의 기준
표준국어대사전(국립국어원)의 자모 배열 순서:
ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
모음 순서:
ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
유니코드와의 차이점
한글 완성형 유니코드(가=44032, 힣=55203)는 초성→중성→종성 순서로 배치되어 있어, 기본 코드포인트 정렬이 국어사전식 정렬과 일반적으로 일치한다. 그러나 다음 경우에 차이가 발생한다.
| 상황 | 국어사전식 | 유니코드 정렬 |
|---|---|---|
| 숫자+한글 혼재 | 한글 먼저 | 숫자 먼저 (ASCII) |
| 대문자+한글 | 가나다 기준 혼재 | 영문 대문자 먼저 |
| 자모 분리 상태 | 완성형과 구분 | 자모 코드포인트 따로 |
올바른 정렬 방법
python
import locale
# 시스템 로케일을 한국어로 설정
locale.setlocale(locale.LC_ALL, 'ko_KR.UTF-8')
names = ["강민준", "가영수", "나나나", "각도기"]
sorted_names = sorted(names, key=locale.strxfrm)
print(sorted_names) # ['가영수', '각도기', '강민준', '나나나']
더 정교한 유니코드 정렬이 필요하다면 icu 라이브러리의 Collator를 사용한다.
엑셀·구글 시트에서의 가나다 정렬
엑셀과 구글 시트는 기본적으로 한국어 로케일을 따라 가나다순으로 정렬한다. 단, 셀 값에 공백이 선행되거나 특수문자가 포함된 경우 예상과 다른 결과가 나올 수 있다. 정렬 전 TRIM 함수로 공백을 제거하는 것이 권장된다.
---
이 글은 AI가 공개 자료를 기반으로 작성했습니다.