2벌식 알고리즘

KS X 5002/5003, 키 매핑, 쌍자음·겹모음 입력, 상태 전이

2벌식은 한글 자모를 두 벌(자음 벌·모음 벌)로 나누어 쿼티 자판에 배치하는 방식이다. 같은 키가 초성이 될 수도 종성이 될 수도 있어, 현재 조합 상태(초성만 / 초성+중성 / 초성+중성+종성)에 따라 키를 해석하는 상태 의존 알고리즘이 필요하다. 아래는 KS X 5002/5003 기준 2벌식 알고리즘 요약이다.


1. KS X 5002·KS X 5003

  • KS X 5002: 대한민국 “정보처리용 건반 배열” 표준(1982년 KS C 5715로 제정, 2007년 KS X 5002로 개정). 고정된 배치로 영문 26자와 한글 낱자 26자(기본 자모 24자 + ㅐ, ㅔ)의 자리를 규정한다.
  • 겹홀소리 2자(ㅖ, ㅒ) 와 된닿소리 5자(ㄲ, ㄸ, ㅃ, ㅆ, ㅉ) 는 표준에서 같은 자리 권장이지만, “다른 낱자를 조합하여 입력할 수 있도록” 글쇠 자리·입력 방법을 고정하지 않았다. 따라서 Shift+키 또는 같은 키 두 번 등 구현이 다양하다.
  • KS X 5003(1991년): 86글쇠·103글쇠에 따른 배열표를 제시한다. 실제 IME는 KS X 5002/5003을 참고하되, 벌별·제조사별로 세부 배열이 다를 수 있으므로 구현 시 표준 문서를 확인한다.

2. 키 → 유니코드 매핑

2.1 유니코드 한글 블록

한글 자모는 유니코드에서 세 가지 블록으로 표현된다:

블록범위용도예시
Hangul JamoU+1100–U+11FF조합용 자모 (초성·중성·종성 구분)ᄀ(U+1100), ᅡ(U+1161), ᆨ(U+11A8)
Hangul Compatibility JamoU+3130–U+318F호환용 자모 (독립 표기)ㄱ(U+3131), ㅏ(U+314F)
Hangul SyllablesU+AC00–U+D7AF완성형 음절가(U+AC00), 각(U+AC01)

IME의 유니코드 사용 방식:

  • preedit(조합 중): 일부 IME는 Hangul Jamo(U+1100–U+11FF)를 사용하고, 일부는 Compatibility Jamo(U+3130–U+318F) 또는 완성형(U+AC00–)을 사용한다.
  • commit(확정): 대부분 완성형 음절(U+AC00–U+D7AF)을 사용한다. 단, 받침 없이 초성만 commit할 때는 Compatibility Jamo를 쓰는 IME도 있다.

2.2 2벌식 키 → 유니코드 자음 매핑

영문 키한글Compatibility JamoJamo (초성)Jamo (종성)
rㄱU+3131U+1100U+11A8
R (Shift+r)ㄲU+3132U+1101U+11A9
sㄴU+3134U+1102U+11AB
eㄷU+3137U+1103U+11AE
E (Shift+e)ㄸU+3138U+1104— (종성 없음)
fㄹU+3139U+1105U+11AF
aㅁU+3141U+1106U+11B7
qㅂU+3142U+1107U+11B8
Q (Shift+q)ㅃU+3143U+1108— (종성 없음)
tㅅU+3145U+1109U+11BA
T (Shift+t)ㅆU+3146U+110AU+11BB
dㅇU+3147U+110BU+11BC
wㅈU+3148U+110CU+11BD
W (Shift+w)ㅉU+3149U+110D— (종성 없음)
cㅊU+314AU+110EU+11BE
zㅋU+314BU+110FU+11BF
xㅌU+314CU+1110U+11C0
vㅍU+314DU+1111U+11C1
gㅎU+314EU+1112U+11C2

참고: ㄸ, ㅃ, ㅉ은 초성으로만 사용되고 종성으로는 사용되지 않는다.

2.3 2벌식 키 → 유니코드 모음 매핑

영문 키한글Compatibility JamoJamo (중성)
kㅏU+314FU+1161
oㅐU+3150U+1162
iㅑU+3151U+1163
O (Shift+o)ㅒU+3152U+1164
jㅓU+3153U+1165
pㅔU+3154U+1166
uㅕU+3155U+1167
P (Shift+p)ㅖU+3156U+1168
hㅗU+3157U+1169
hkㅘU+3158U+116A
hoㅙU+3159U+116B
hlㅚU+315AU+116C
yㅛU+315BU+116D
nㅜU+315CU+116E
njㅝU+315DU+116F
npㅞU+315EU+1170
nlㅟU+315FU+1171
bㅠU+3160U+1172
mㅡU+3161U+1173
mlㅢU+3162U+1174
lㅣU+3163U+1175

겹모음 입력: ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ는 두 키 시퀀스로 입력한다. 예: h(ㅗ) + k(ㅏ) → ㅘ


3. 키 → 자모 매핑 (2벌식 공통 구조)

3.1 자음 벌 (초성/종성 공용 키)

왼손 영역에 자음을 배치한다. 키 하나가 초성으로 쓰일 때와 종성으로 쓰일 때 같은 인덱스가 아닐 수 있다(겹받침: 종성 ㄳ, ㄵ 등은 초성 19개와 1:1이 아님). 아래는 초성 인덱스(L) 기준 매핑 예이다.

영문 키기본 자음Shift+키(쌍자음)초성 L
rㄱㄲ0, 1
Rㄲ—1
sㄴ—2
eㄷㄸ3, 4
fㄹ—5
aㅁ—6
qㅂㅃ7, 8
tㅅㅆ9, 10
dㅇ—11
wㅈㅉ12, 13
cㅊ—14
zㅋ—15
xㅌ—16
vㅍ—17
gㅎ—18

종성(T) 은 같은 자음 키를 쓰되, 받침으로 유효한 종성만 허용한다. 종성 28가지(0=없음, 1~27) 중 일부는 겹받침(ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ 등)으로, 두 키 시퀀스 또는 종성 전용 조합으로 입력한다. 한글 조합 규칙(겹모음·겹받침) 참고.

3.2 모음 벌 (중성)

오른손 영역에 모음을 배치한다. 단모음은 키 하나, 겹모음은 두 모음 키 연속 입력으로 조합한다.

영문 키기본 모음Shift 등중성 V
kㅏㅐ0, 1
iㅑㅒ2, 3
jㅓㅔ4, 5
uㅕㅖ6, 7
hㅗ—8
yㅛ—12
nㅜ—13
bㅠ—17
mㅡ—18
lㅣ—20

겹모음: ㅗ+ㅏ→ㅘ(V=9), ㅗ+ㅐ→ㅙ(10), ㅗ+ㅣ→ㅚ(11), ㅜ+ㅓ→ㅝ(14), ㅜ+ㅔ→ㅞ(15), ㅜ+ㅣ→ㅟ(16), ㅡ+ㅣ→ㅢ(19). 한글 조합 규칙에 시퀀스→V 인덱스 표가 있다.


4. 상태 의존 해석 (같은 키, 다른 역할)

2벌식에서는 현재 상태에 따라 같은 자음 키가 초성 또는 종성으로 해석된다.

현재 상태자음 키 입력해석
초성만 (L만 있음)같은 키쌍자음(ㄱ→ㄲ) 또는 새 초성(구현에 따라)
초성만다른 키새 초성으로 교체 또는 commit 후 새 초성
초성+중성 (L,V)자음 키종성 후보. 받침으로 유효하면 T 설정 → (L,V,T). 유효하지 않으면 commit 후 새 초성.
초성+중성+종성 (L,V,T)자음 키겹받침 시도 또는 commit 후 새 초성

모음 키는 “초성만”일 때는 중성 추가(→ L,V), “초성+중성” 또는 “초성+중성+종성”일 때는 겹모음 시도 또는 commit + 새 (L,V) 시작(종성→다음 초성 변환). 한글 입력기 구현의 전이 규칙과 동일하다.


5. 쌍자음 입력 규칙

  • Shift+자음 키: 해당 쌍자음(ㄲ, ㄸ, ㅃ, ㅆ, ㅉ). L 인덱스 1, 4, 8, 10, 13.
  • 같은 키 두 번: 일부 IME는 “ㄱ” 두 번 → “ㄲ”으로 처리한다. 구현 정책에 따름.

6. 겹모음 입력 규칙 (요약)

첫 모음 ㅗ(8), ㅜ(13), ㅡ(18) 뒤에 두 번째 모음을 넣으면 겹모음으로 인식한다.

  • ㅗ + ㅏ → ㅘ(9), ㅗ + ㅐ → ㅙ(10), ㅗ + ㅣ → ㅚ(11)
  • ㅜ + ㅓ → ㅝ(14), ㅜ + ㅔ → ㅞ(15), ㅜ + ㅣ → ㅟ(16)
  • ㅡ + ㅣ → ㅢ(19)

“초성+중성” 상태에서 첫 모음이 ㅗ/ㅜ/ㅡ가 아닌데 또 모음 키가 오면, 현재 음절 commit + 새 (L,V) 로 처리한다(새 L은 종성→초성 변환).


7. 종성 → 다음 글자 초성 변환

“초성+중성+종성” 상태에서 모음을 입력하면, 현재 음절을 commit한 뒤 다음 음절을 시작한다. 이때 종성 T를 다음 음절의 초성 L으로 바꿔야 한다.

  • 단받침: T=1(ㄱ) → 다음 L=0(ㄱ), T=5(ㄹ) → 다음 L=5(ㄹ). 대부분 T와 같은 키의 초성이 다음 L이 된다.
  • 겹받침: T=3(ㄳ) → 다음 L=9(ㅅ) 등, 종성 한 글자가 다음 초성 한 글자로만 대응되지 않고, 첫째/둘째 자음 규칙이 있다. 한글 조합 규칙에 종성→초성 변환표를 둔다.

8. 완성형 계산 (동일)

S = 0xAC00 + (L × 588) + (V × 28) + T

L, V, T는 한글 조합 원리의 인덱스와 동일하다. 2벌식은 키→(L,V,T) 변환 방식만 다르고, 완성형 공식은 3벌식과 같다.


9. 알고리즘 요약 (의사코드)

  • keyToChoseong(key, shift) → L (0~18). 자음 벌 키 + Shift → 초성 인덱스.
  • keyToJungseong(key, shift) → V (0~20). 모음 벌 키 + Shift 또는 이전 V + 현재 키 → 겹모음 V.
  • keyToJongseong(key) → T (1~27). 자음 벌 키를 종성으로 해석할 때만 사용. 받침 불가 조합이면 사용하지 않고 commit 후 초성으로 처리.
  • jongseongToChoseong(T) → 다음 음절의 L. 종성→초성 변환표 사용.

상태 전이·commit 조건은 한글 입력기 구현과 한글 조합 원리를 참고한다.