2벌식 알고리즘
KS X 5002/5003, 키 매핑, 쌍자음·겹모음 입력, 상태 전이
2벌식은 한글 자모를 두 벌(자음 벌·모음 벌)로 나누어 쿼티 자판에 배치하는 방식이다. 같은 키가 초성이 될 수도 종성이 될 수도 있어, 현재 조합 상태(초성만 / 초성+중성 / 초성+중성+종성)에 따라 키를 해석하는 상태 의존 알고리즘이 필요하다. 아래는 KS X 5002/5003 기준 2벌식 알고리즘 요약이다.
1. KS X 5002·KS X 5003
Section titled “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벌식 공통 구조)
Section titled “2. 키 → 자모 매핑 (2벌식 공통 구조)”2.1 자음 벌 (초성/종성 공용 키)
Section titled “2.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) 중 일부는 겹받침(ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ 등)으로, 두 키 시퀀스 또는 종성 전용 조합으로 입력한다. 한글 조합 규칙(겹모음·겹받침) 참고.
2.2 모음 벌 (중성)
Section titled “2.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 인덱스 표가 있다.
3. 상태 의존 해석 (같은 키, 다른 역할)
Section titled “3. 상태 의존 해석 (같은 키, 다른 역할)”2벌식에서는 현재 상태에 따라 같은 자음 키가 초성 또는 종성으로 해석된다.
| 현재 상태 | 자음 키 입력 | 해석 |
|---|---|---|
| 초성만 (L만 있음) | 같은 키 | 쌍자음(ㄱ→ㄲ) 또는 새 초성(구현에 따라) |
| 초성만 | 다른 키 | 새 초성으로 교체 또는 commit 후 새 초성 |
| 초성+중성 (L,V) | 자음 키 | 종성 후보. 받침으로 유효하면 T 설정 → (L,V,T). 유효하지 않으면 commit 후 새 초성. |
| 초성+중성+종성 (L,V,T) | 자음 키 | 겹받침 시도 또는 commit 후 새 초성 |
모음 키는 “초성만”일 때는 중성 추가(→ L,V), “초성+중성” 또는 “초성+중성+종성”일 때는 겹모음 시도 또는 commit + 새 (L,V) 시작(종성→다음 초성 변환). 한글 입력기 구현의 전이 규칙과 동일하다.
4. 쌍자음 입력 규칙
Section titled “4. 쌍자음 입력 규칙”- Shift+자음 키: 해당 쌍자음(ㄲ, ㄸ, ㅃ, ㅆ, ㅉ). L 인덱스 1, 4, 8, 10, 13.
- 같은 키 두 번: 일부 IME는 “ㄱ” 두 번 → “ㄲ”으로 처리한다. 구현 정책에 따름.
5. 겹모음 입력 규칙 (요약)
Section titled “5. 겹모음 입력 규칙 (요약)”첫 모음 ㅗ(8), ㅜ(13), ㅡ(18) 뒤에 두 번째 모음을 넣으면 겹모음으로 인식한다.
- ㅗ + ㅏ → ㅘ(9), ㅗ + ㅐ → ㅙ(10), ㅗ + ㅣ → ㅚ(11)
- ㅜ + ㅓ → ㅝ(14), ㅜ + ㅔ → ㅞ(15), ㅜ + ㅣ → ㅟ(16)
- ㅡ + ㅣ → ㅢ(19)
“초성+중성” 상태에서 첫 모음이 ㅗ/ㅜ/ㅡ가 아닌데 또 모음 키가 오면, 현재 음절 commit + 새 (L,V) 로 처리한다(새 L은 종성→초성 변환).
6. 종성 → 다음 글자 초성 변환
Section titled “6. 종성 → 다음 글자 초성 변환”“초성+중성+종성” 상태에서 모음을 입력하면, 현재 음절을 commit한 뒤 다음 음절을 시작한다. 이때 종성 T를 다음 음절의 초성 L으로 바꿔야 한다.
- 단받침: T=1(ㄱ) → 다음 L=0(ㄱ), T=5(ㄹ) → 다음 L=5(ㄹ). 대부분 T와 같은 키의 초성이 다음 L이 된다.
- 겹받침: T=3(ㄳ) → 다음 L=9(ㅅ) 등, 종성 한 글자가 다음 초성 한 글자로만 대응되지 않고, 첫째/둘째 자음 규칙이 있다. 한글 조합 규칙에 종성→초성 변환표를 둔다.
7. 완성형 계산 (동일)
Section titled “7. 완성형 계산 (동일)”S = 0xAC00 + (L × 588) + (V × 28) + TL, V, T는 한글 조합 원리의 인덱스와 동일하다. 2벌식은 키→(L,V,T) 변환 방식만 다르고, 완성형 공식은 3벌식과 같다.
8. 알고리즘 요약 (의사코드)
Section titled “8. 알고리즘 요약 (의사코드)”- 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. 종성→초성 변환표 사용.