이름 목록을 가나다순으로 정렬했는데 "왜 이 순서지?" 싶었던 적이 있을 것입니다. 한글 정렬은 단순히 글자 모양 순서가 아니라 자음과 모음의 정해진 순서를 따르고, 숫자나 영문이 섞이면 규칙이 더 복잡해집니다. 이 글에서는 한글이 정렬되는 원리를 차근히 풀어 봅니다.
한글은 초성·중성·종성 순으로 비교된다
한글 한 글자는 초성(첫 자음), 중성(모음), 종성(받침)으로 이뤄집니다. 정렬은 이 세 부분을 순서대로 비교합니다. 먼저 초성을 비교하고, 초성이 같으면 중성을, 중성까지 같으면 종성을 비교하는 방식입니다.
초성의 순서는 ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ 입니다. 그래서 '가'로 시작하는 단어가 '나'로 시작하는 단어보다 앞에 옵니다. 중성(모음)은 ㅏ, ㅐ, ㅑ, ㅒ, ㅓ… 순서를, 종성은 받침 없음이 가장 앞이고 그다음 ㄱ, ㄲ, ㄳ… 순서를 따릅니다.
예를 들어 '강'과 '가'를 비교하면, 초성 ㄱ과 중성 ㅏ가 같고 '가'는 받침이 없으므로 '가'가 '강'보다 앞에 옵니다. '가나다'가 자연스러운 순서로 나오는 것은 이 규칙 덕분입니다.
왜 직접 정렬하면 순서가 이상할까
컴퓨터가 문자를 비교하는 가장 기본적인 방식은 각 문자에 매겨진 내부 번호(코드값)를 비교하는 것입니다. 다행히 현대 한글은 코드값 순서가 가나다 순서와 대체로 일치하도록 배열돼 있어, 완성된 한글끼리는 코드값 비교만으로도 가나다순에 가깝게 정렬됩니다.
문제는 숫자, 영문, 기호가 섞일 때입니다. 코드값 기준으로는 숫자와 영문이 한글보다 앞선 번호를 가져서, 단순 정렬을 하면 "1번, 2번, A조, 가나다"처럼 종류별로 뭉쳐 나옵니다. 사람이 기대하는 순서와 다를 수 있습니다.
로케일 기반 정렬과 자연 정렬
이런 문제를 줄이려고 줄 정렬 도구는 한국어 로케일 비교 기능을 사용합니다. 로케일 기반 정렬은 단순 코드값이 아니라 '한국어 사용자가 기대하는 순서'를 반영해 비교하므로, 한글·숫자·영문이 섞여도 더 자연스러운 결과를 냅니다.
특히 중요한 것이 자연 정렬(natural sort) 입니다. 파일명 "항목2"와 "항목10"을 단순 문자 비교하면 '1'이 '2'보다 앞서므로 "항목10"이 "항목2"보다 앞에 옵니다. 자연 정렬은 숫자 부분을 하나의 수로 인식해 2, 10 순으로 배열합니다. 버전명이나 번호가 붙은 목록을 정렬할 때 이 차이가 큽니다.
오름차순과 내림차순
정렬 방향은 두 가지입니다. 오름차순은 가나다·작은 수부터, 내림차순은 그 반대입니다. 도구에서 방향을 선택하면 전체 순서를 뒤집을 수 있습니다. 명단을 만들 때는 오름차순이, 최신 항목이나 큰 값을 위로 올릴 때는 내림차순이 유용합니다.
정렬할 때 알아두면 좋은 점
정렬은 중복을 제거하지 않습니다. 같은 항목이 여러 번 있으면 그대로 이웃해 나열됩니다. 고유 목록이 필요하면 중복 줄 제거기를 함께 쓰세요. 정렬 후 중복이 이웃하므로 눈으로 확인하기도 쉽습니다.
또, 기호로 시작하는 항목이나 공백이 앞에 붙은 항목은 기대와 다른 위치에 올 수 있으므로, 정렬 전 앞뒤 공백을 정리해 두면 결과가 깔끔합니다.
자주 묻는 질문
Q. 받침이 있는 글자가 없는 글자보다 뒤에 오나요? 네. 초성·중성이 같으면 받침 없는 글자가 앞, 받침 있는 글자가 뒤에 옵니다. '가'가 '각'보다 앞입니다.
Q. 숫자 목록이 이상하게 정렬돼요. 자릿수가 다른 숫자를 단순 문자로 비교하면 "10"이 "2"보다 앞설 수 있습니다. 자연 정렬을 지원하는 도구를 쓰면 개선됩니다.
Q. 영문 대소문자는 정렬에 영향을 주나요? 로케일에 따라 대소문자를 같은 위치로 보거나 다르게 볼 수 있습니다. 결과가 예상과 다르면 표기를 통일해 보세요.
Q. 정렬하면 중복이 사라지나요? 아니요. 정렬은 순서만 바꿉니다. 중복 제거는 별도로 해야 합니다.
정렬 결과는 사용하는 시스템의 로케일과 비교 방식에 따라 세부가 달라질 수 있습니다.