정렬/순서

< 정렬

이 문서에서는 문자·언어별 정렬 순서를 다룬다. 사전을 찾아볼 때나, 정렬에 관련된 프로그래밍을 할 때 유용할 것이다.

다양한 문자·언어에 대해 지식이 있는 위키니트들이 추가바람. 여러 언어가 같은 문자 체계를 공유하는 경우도 있으므로 문자별로 단락을 만들어서 정리하도록 하고, 같은 문자에 다른 정렬 순서가 적용되는 경우 하위 단락으로 만들 것.

1 정렬 관련 용어

정렬에도 여러 가지 단계가 있다.

단계는 보통 primary difference, secondary difference, tertiary difference, quaternary difference 네 단계로 나눠지며, 라틴 문자와 가나의 경우 이 네 단계는 다음과 같이 분류된다. 일단 영어 용어를 사용하나, 통용되는 적절한 한국어 번역어가 있다면 그 번역어로 수정바람.

  1. primary difference: 글자 자체가 다른 경우 (ab < ac < ad, はい < はう < はえ)
  2. secondary difference: 주로 diacritic 차이 (ab < áb < ac, はい < ばい < はう)
diacritic이 없는 것이 있는 것보다 앞에 온다.
  1. tertiary difference: 대소문자 차이 (ab < Ab < áb, しゃ < しや < じゃ)
보통 소문자가 대문자보다 앞에 온다.
  1. quaternary difference: 문장 부호 차이 (ab < a c < a-c < ac < ad)

위 예에서 ab와 ac, はい와 はう 사이에는 primary difference가 있고, ab와 áb, はい와 ばい 사이에는 secondary difference가 있으며, ab와 Ab, しゃ와 しや 사이에는 tertiary difference가 있으며, a c와 a-c, ac 사이에는 quaternary difference가 있다.

정렬 시에는 언제나 상위 단계가 우선적으로 적용된다. 즉 primary difference가 있을 경우 secondary difference 이하는 무시되며, primary difference가 없고 secondary difference가 있을 경우 tertiary difference 이하는 무시된다.

다만 secondary difference의 경우, '주로' diacritic 차이인 것을 염두에 두어야 한다. 만약 어떤 언어에서 á를 a와는 아예 다른 별개의 문자로 볼 경우, a와 á 사이에는 secondary difference가 아니라 primary difference가 있는 것이 되며, 이 경우 ab < ac < áb 순으로 정렬된다. diacritic이 붙은 문자와 붙지 않은 문자를 별개의 문자로 볼지(primary difference), 아니면 일단은 똑같은 문자로 볼지(secondary difference)는 언어에 따라 다르기 때문에 주의가 필요하다. 아래 '스페인어' 섹션을 보면 알겠지만 스페인어의 경우 a와 á 사이에는 secondary difference가 있지만 n과 ñ 사이에는 primary difference가 있다.

이 항목에서는 primary difference와 secondary difference만을 주로 다룬다.

2 한글

모든 낱자 사이에는 primary difference가 존재하며, 초성이 같을 경우 중성 순으로, 초성과 중성이 모두 같을 경우 종성 순으로 정렬된다.

2.1 대한민국 표준어

대한민국 표준어에서 사용되는 정렬 순서는 다음과 같다. 대개 가나다순이라고 한다.

  • 초성: ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
  • 중성: ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
  • 종성: (없음) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ

ㅐ는 ㅏ와 ㅣ의 합자로 보기 때문에 ㅏ와 ㅑ 사이에 온다. ㅒ, ㅔ, ㅖ도 동일.

쌍자음의 경우 조금 변천이 있었다. ㄱ과 ㄲ을 예로 들자면, 과거에는 ㄲ이 ㄱ에 diacritic이 붙은 것으로 취급하여 ㄱ과 ㄲ 사이에 secondary difference가 있는 것으로 보았으나(가, 까, 각, 깍, … 순. 예: 가오리 < 까마귀 < 각다귀), 현재는 ㄱ과 ㄲ 사이에 primary difference가 있는 것으로 보고 ㄱ과 ㄲ을 완전히 따로 분리해서 배열한다(가, 각, …, 깋, 까, 깍, … 순. 예: 가오리 < 각다귀 < 까마귀).

2.1.1 옛한글

표준어의 어문 규정에는 옛한글에 대한 정렬 순서는 없으나, 대한민국의 KS X 1026-1 규격(정보교환용 한글 처리지침)에 따르면 옛한글은 다음과 같이 정렬한다. 표준어의 정렬 순서를 확장한 것으로 볼 수 있다.

  • ㅿ은 ㅅ의 뒤에, ㆁ은 ㅇ의 뒤에, ㆆ은 ㅎ의 뒤에 따로 정렬하고, ㆍ(아래아)는 ㅣ의 뒤에 따로 정렬한다.
  • ㅲ, ㅼ, ㅵ과 같이 두세 낱자로 이루어진 병서는 A+B(+C)와 같이 보고 정렬한다. 예를 들어 ㅲ, ㅳ 등은 각각 ㅂ+ㄱ, ㅂ+ㄷ 등으로 보고 ㅂ과 ㅃ(= ㅂ+ㅂ) 사이에 정렬하고, ㅴ, ㅵ, ᄤ 등은 ㅄ과 ㅶ 사이에 정렬하고, ㅺ, ㅻ, ㅼ, ㅽ 등은 ㅅ과 ㅆ(= ㅅ+ㅅ) 사이에 정렬한다. 모음도 마찬가지로, ᅺ(= ㅓ+ㅗ), ᅻ(= ㅓ+ㅜ), ᅼ(= ㅓ+ㅡ) 등은 ㅓ와 ㅔ(= ㅓ+ㅣ) 사이에 정렬한다.
  • 연서(ᄛ, ㅱ, ㅸ, ㅹ, ㆄ)는 병서의 뒤에 따로 정렬한다. ㅷ ᄪ ㅂㅎ ㅸ ㅹ ㅅ 순서이다.
  • 치두음(왼쪽으로 늘어진 낱자)과 정치음(오른쪽으로 늘어진 낱자)은 원 낱자(ㅅ, ㅈ, ㅊ)들의 뒤에 따로 정렬한다. 동일한 원 낱자 범위 안에서 치두음은 정치음보다 무조건 앞으로 정렬된다. 즉, 치두음 쌍시옷(ᄽ)이 정치음 시옷(ᄾ)보다 앞이다. ᄺ ᄻ ᄼ ᄽ ᄾ ᄿ ㅿ 순서이다.

구체적으로는 다음과 같이 정렬한다. 아래 이미지는 유니코드에 있는 모든 한글 낱자를 순서대로 정렬한 것이다. 자음의 경우 위의 것이 초성, 아래의 것이 종성이다.
500px

2.2 북한 문화어

북한 문화어에서 사용되는 정렬 순서는 다음과 같다.

  • 초성: ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㄸ ㅃ ㅆ ㅉ ㅇ
  • 중성: ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ ㅐ ㅒ ㅔ ㅖ ㅚ ㅟ ㅢ ㅘ ㅝ ㅙ ㅞ
  • 종성: (없음) ㄱ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ ㄲ ㅆ

자음의 경우 쌍자음을 뒤에 배당하며, 모음의 경우 합성 자모를 뒤에 배당한다. 초성 ㅇ은 음가가 없기 때문에, 초성 ㅇ으로 시작하는 경우는 모음으로 시작한다고 보고 맨 뒤에 배당한다.

예를 들어, {개, 토끼, 하마, 오리, 기러기, 까마귀, 가오리}로 이루어진 단어 집합의 원소들을 남한식과 북한식으로 정렬하면 이렇게 된다.

  • 남: 가오리 < 개 < 기러기 < 까마귀 < 오리 < 토끼 < 하마
  • 북: 가오리 < 기러기 < 개 < 토끼 < 하마 < 까마귀 < 오리

이 순서는 다음과 같이 여러 그룹으로 나누면 쉽게 기억할 수 있다.

  • 초성: ㅇ을 제외한 홑자음(ㄱ ㄴ ㄷ ㄹ ㅁ ㅂ ㅅ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ), 쌍자음(ㄲ ㄸ ㅃ ㅆ ㅉ), ㅇ
  • 중성: 기본 모음(ㅏ ㅑ ㅓ ㅕ ㅗ ㅛ ㅜ ㅠ ㅡ ㅣ), ㅣ로 끝나는 digraph(ㅐ ㅒ ㅔ ㅖ ㅚ ㅟ ㅢ), 나머지 digraph(ㅘ ㅝ), trigraph(ㅙ ㅞ)
  • 종성: 쌍자음 둘(ㄲ ㅆ)만 맨 뒤로 뺌

참고로 유니코드에서는 북한식 정렬은 철저하게 외면당하고, 오로지 남한식 정렬만 채택되었다. 그래서 북한식 정렬을 컴퓨터에서 구현하려면 남한식 정렬을 구현할 때보다 추가적인 삽질이 필요하다. 남북한 한글 코드의 충돌 문제 문서 참조.

옛한글을 문화어식으로 정렬한다면 굉장히 복잡할 것으로 보이는데, 문화어식 옛한글 정렬에 대해 정보가 있는 사람이 추가바람. 과연 있을까? 표준어식 정렬은 확장이 용이하기 때문에 옛한글도 쉽게 수용할 수 있지만, 문화어식 정렬은 확장이 까다로워서 옛한글을 수용하기 어렵다. 옛한글은 그 정확한 발음을 아무도 모르기 때문에 음가 기준이 아니라 표준어식 정렬 순서와 같이 자형 기준으로 하는 것이 바람직하다.

3 라틴 문자

기본적으로는 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 순을 따르고 모든 글자 사이에 primary difference가 있으나, 언어에 따라서 조금씩 차이가 있다. 아래에서 별도의 언급이 없는 한 기본적으로 이 정렬 순서를 따른다.

3.1 영어

영어도 일부 어휘 악센트 부호(diacritic)가 쓰이는 경우가 있는데,[1] diacritic이 붙은 문자와 diacritic이 붙지 않은 문자 사이에는 secondary difference가 있다.

  • 예: echo < éclair < eclipse, resume < résumé

3.2 독일어

움라우트(umlaut)가 붙은 글자(Ä, Ö, Ü)와 움라우트가 없는 글자(A, O, U) 사이에는 secondary difference가 있다. ß는 그 유래상 ss 또는 sz 모두로 해석 가능한 문자이지만 철자 순서를 정할 때 ss라고 취급한다.

  • 예: Arg < Ärgerlich < Arm < Assistent < Aßlar < Assoziation

단 Ä, Ö, Ü는 각각 AE, OE, UE와 동일하게 처리된다. 독일어에서 움라우트 붙은 모음과 움라우트 없이 뒤에 E를 덧붙인 모음은 서로 대체 가능한 표기로 쓰이는 경우가 대부분이기 때문이다.[2]

  • 예: Udet < Übelacker < Uell < Ülle < Ueve < Üxküll < Uffenbach

3.3 프랑스어

diacritic이 붙은 문자와 diacritic이 붙지 않은 문자 사이에는 secondary difference가 있다. primary difference가 없고 secondary difference가 있다면(= diacritic을 제거했을 때 똑같아진다면), 마지막 diacritic에 따라 정렬된다.

  • 예: cote < côte < coté < côté

3.4 스페인어

acento가 붙은 문자(Á, É, Í, Ó, Ú)와 Ü는 붙지 않은 문자(A, E, I, O, U) 사이에는 secondary difference가 있다.

  • 예: facial < fácil < facilidad, como < cómo

다만 Ñ와 N 사이에는 primary difference가 있는 것으로 보고 N 뒤에 Ñ를 따로 정렬한다.

  • 예: anticipar < año < aorta

1997년까지는 CH와 LL을 별도의 문자로 보고 각각 C와 L 뒤에 따로 배열했지만, 현재는 별도의 문자로 보지 않고 각각 C + H, L + L로 본다.

  • 과거: centro < cielo < champú, limpiar < locación < llamar
  • 현재: centro < champú < cielo, limpiar < llamar < locación

3.5 에스페란토

Ĉ, Ĝ, Ĥ, Ĵ, Ŝ, Ŭ와 C, G, H, J, S, U 사이에는 primary difference가 있다(…, C, Ĉ, D, E, F, G, Ĝ, H, Ĥ, I, J, Ĵ, …, S, Ŝ, T, U, Ŭ, V, Z).

3.6 스웨덴어

Å, Ä, Ö는 Z 뒤에 별도의 문자로 정렬된다(…, X, Y, Z, Å, Ä, Ö).

3.7 포르투갈어

영어와 동일하다. diacritic이 쓰이는 경우가 있는데, diacritic이 붙은 문자와 diacritic이 붙지 않은 문자 사이에는 secondary difference가 있다.

3.8 터키어

Ç, Ğ, İ(i), Ö, Ş, Ü와 C, G, I(ı), O, S, U 사이에는 primary difference가 있다. I(ı)와 İ(i)의 경우, I(ı) < İ(i)와 같이 점이 없는 것이 앞으로, 있는 것이 뒤로 간다.

3.9 중국어(한어 병음)

성조 부호가 붙은 문자와 성조 부호가 붙지 않은 문자 사이에는 secondary difference가 있다. 성조 부호의 경우 부호 없음(a) < 음평(→, ā) < 상성(↗, á) < 양평(∨, ǎ) < 거성(↘, à) 순으로 정렬된다.
다만 U와 Ü 사이에는 primary difference가 있는 것으로 보고 Ü를 U 뒤에 따로 정렬한다.

  • 예: lu < lǔ < luo < lü < lǜ

4 가나

기본적으로 오십음도를 따라 あ い う え お か き く け こ さ し す せ そ た ち つ て と な に ぬ ね の は ひ ふ へ ほ ま み む め も や ゆ よ ら り る れ ろ わ ゐ ゑ を ん 순으로 정렬되며, 각 문자 사이에는 primary difference가 존재한다. 히라가나만을 예로 드나, 가타카나에도 똑같이 적용된다.

  • 탁점(゛)과 반탁점(゜)이 붙은 가나와 붙지 않은 가나 사이에는 secondary difference가 있다. primary difference가 없을 경우, 없음 < 탁점 < 반탁점 순서로 정렬한다.
  • 작은 가나와 보통 크기의 가나 사이에는 tertiary difference가 있다. primary difference와 secondary difference가 없을 경우, 작은 가나 < 보통 크기의 가나 순서로 정렬한다.
  • 장음 부호(ー)는 앞 글자가 あ단일 경우 あ로, い단일 경우 い로, う단일 경우 う로, え단일 경우 え로, お단일 경우 お로, ん일 경우 ん으로 바꿔 처리한다.
  • ゝ, 々는 바로 앞 글자로 바꿔 처리한다. 앞 글자도 ゝ나 々일 경우는 그 앞 글자로 바꿔 처리한다.
  • 한자의 경우 해당 한자의 일본어 독음을 따른다.

혹은 이와는 별개로, 일본어의 50음도를 사용해 만든 이로하 노래의 순서에 따라 배열하기도 한다. 일본 법률의 조문의 이나 음 이름[3] , 일본 해군과 해상자위대에서도 사용하였다.

5 주음부호

ㄅ ㄆ ㄇ ㄈ ㄉ ㄊ ㄋ ㄌ ㄍ ㄎ ㄏ ㄐ ㄑ ㄒ ㄓ ㄔ ㄕ ㄖ ㄗ ㄘ ㄙ ㄚ ㄛ ㄜ ㄝ ㄞ ㄟ ㄠ ㄡ ㄢ ㄣ ㄤ ㄥ ㄦ ㄧ ㄨ ㄩ 순으로 정렬된다. 각 문자 사이에는 primary difference가 존재한다.

6 한자

6.1 독음 순 정렬

한국어, 일본어, 중국어, 베트남어 등은 자신만의 한자 독음을 가지고 있으며, 이러한 언어들은 그 독음에 따라 한자를 정렬하는 경우가 많다.

6.2 부수-나머지 획수 순 정렬

한자를 1차적으로 부수에 따라 정렬하며, 부수가 같은 한자는 부수를 제외한 나머지 부분의 획수 순으로 정렬한다. 부수강희자전의 214부수 체계를 따르는 것이 일반적이다. 각 부수 사이에는 primary difference가 존재한다.

이 정렬 방식은 한자의 독음을 알 수 없을 때(또는 한 한자에 여러 독음이 존재할 때) 유용하게 쓰일 수 있으며, 특정 언어의 독음에 의존하지 않아도 되기 때문에 중립적이기도 하다. 다만 부수와 획수가 같은 한자의 순서는 정해지지 않았다.

실제로 유니코드의 한자 영역은 이 순서에 따라 배열돼 있다(一, 丁, 丂, …, 龣, 龤, 龥)[4]. 유니코드가 이 배열 순서를 채택한 것은 바람직하다고 할 수 있다. 왜냐하면 유니코드는 특정 언어만을 위한 문자 집합이 아니라 모든 언어를 위한 문자 집합이고, 옛 문헌에 나오는 독음을 알 수 없는 한자들도 비교적 쉽게 배열해 추가할 수 있다는 장점이 있기 때문이다.

7 아랍 문자

ا ﺏ ﺕ ﺙ ﺝ ح خ د ذ ر ز ﺱ ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي ڭ گ ﭪ ژ ﭺ پ 순으로 정렬된다. 각 문자 사이에는 primary difference가 존재한다.
단, 기본적으로 좌서 문자이기 때문에 맨 오른쪽의 글자를 기준으로 정렬된다.

8 히브리 문자

א בּ ב ג ד ה ו ז ח ט י כּ כ ך ל מ ם נ ן ס ע פּ פ ף צ ץ ק ר ש תּ ת 순으로 정렬된다. 각 문자 사이에는 primary difference가 존재한다.
단, 기본적으로 좌서 문자이기 때문에 맨 오른쪽의 글자를 기준으로 정렬된다.

9 단순 유니코드 순 정렬

단순히 유니코드 코드 값 순으로 정렬하는 것은 그 어떤 언어에도 적합하다고 할 수 없다.

라틴 문자의 경우 소문자 a(U+0061)가 대문자 Z(U+005A)보다 뒤에 오게 되며, Ñ(U+00D1)는 소문자 z(U+007A)보다도 뒤에 오게 된다.

한글의 경우 (U+3134) 같은 낱자나 'ᄒᆞᆫ'(U+1112 U+119E U+11AB)과 같이 조합형 낱자로 이루어진 옛한글이 언제나 완성형 한글 글자 마디 '가'(U+AC00)보다 앞에 오게 된다.

한자의 경우, 위에서도 언급했듯 유니코드에는 강희자전 부수 순으로 정렬되어 있으며, 특정 언어의 독음 순으로 배당돼 있지 않다. 일본어에서 주로 쓰이는 々, ゝ, 장음 부호(ー) 등은 여러 영역에 흩어져 있다.

그래서 일본어 정렬 시 별도의 처리를 하지 않고 단순 유니코드 순으로 정렬하면 々 < 히라가나 < ゝ < 가타카나 < 장음 부호(ー) < 한자(강희자전 순)와 같은 순서로 정렬된다. 회원 가입 시 히라가나를 따로 받는 것도 이것 때문이며, 이런 꼼수를 쓰지 않는 경우 인명 정렬 시 あ가 아닌 (한 일)로 시작하는 이름이 맨 앞에 온다. 즉 가나 순으로는 비교적 뒷자리인 히토츠이 하지메(一一 一)가 강희자전 순으로 가장 앞에 온다는 말(…).

즉 어떤 언어든 올바른 정렬을 위해서는 별도의 처리가 필요하며, 코드 값에만 의존해서는 올바른 정렬이 불가능하다.
  1. 주로 근래에 들어온 프랑스어독일어 등의 외래어에 쓰는 경우가 많다. 그렇지만 영어 고유어나 오래 전에 유입돼 영어로 완전히 흡수된 외래어 중에서도 악센트 부호를 덧붙이는 경우가 드물긴 해도 없지는 않다. 예를 들면 음절의 명확한 구분을 위해 ¨를 덧붙이는 경우가 많다. cooperation을 coöperation으로 쓰는 경우가 한 예인데, 이건 이 단어의 oo 부분이 하나의 모음을 나타내는 게 아니라 co-operation 식으로 나뉜다는 것을 강조하기 위해 o 위에 ¨를 덧붙인 것이다(참고로 이와 유사한 용법이 스페인어 등에서 쓰이고 있다). 또 다른 예로는 시어(詩語) 등에서 -ed를 -èd로 쓰는 경우가 있다. loved를 lovèd로 쓴다든가 blessed('블레스트'가 아니라 '블레시드'로 읽을 때로 한정)를 blessèd로 쓴다든가 등등. 물론 이런 용법은 근래에 거의 안 쓰는 추세이다.
  2. 독일어에서 나타나는 전설모음화를 나타내기 위해 옛날에는 a, o, u 위에 e를 작게 덧붙여 쓰기도 했는데(대문자 A, O, U 위에도 소문자 e를 위에 덧붙임) 이것이 이후 오늘날과 같은 움라우트 기호(모음 위에 점 두 개)로 변한 것이다. 작은 e보다는 점 두 개가 쓰기 쉽기 때문. 이런 유래 때문에 Ä, Ö, Ü와 AE, OE, UE가 혼용되는 것이다. 참고로 스페인어 등에서 쓰이는 두 점(분절음표, 트레마)과는 모양이 같지만 움라우트와 유래도 다르고 이름도 다르니 주의.
  3. 다장조는 하장조(ハ長調), 라단조는 니단조(ニ短調)가 된다. 즉 도레미파솔라시도=다라마바사가나다=하니호헤토이로하.
  4. 그런데 사실 전체적으로 보면 맞는 얘기는 아니다. 한자의 BMP 영역이 확정된 이래 찔끔찔끔(...) 뒤에 추가해서 결과적으로 30여 자가 더 추가되었기 때문. 물론, 그 부분은 자주 무시당한다(...). 더해서 이후에 추가된 SIP는 정렬 순서가 따로 논다.