Skip to content

한글 조합 규칙 (겹모음·겹받침·종성→초성)

겹모음 시퀀스, 겹받침, 종성에서 다음 초성 변환표

한글 IME에서 겹모음(ㅘ, ㅙ, ㅚ, ㅝ, ㅞ, ㅟ, ㅢ), 겹받침(ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ), 종성→다음 글자 초성 변환을 구현할 때 참고할 규칙·테이블을 정리했다. L, V, T 인덱스는 한글 조합 원리와 동일하다.


flowchart TD
    INPUT[모음 입력] --> CHECK{"V가 ㅗ/ㅜ/ㅡ?"}
    CHECK --> |아니오| NO_DOUBLE[겹모음 불가]
    CHECK --> |예| CHECK2{조합 가능?}
    CHECK2 --> |아니오| NO_DOUBLE
    CHECK2 --> |예| DOUBLE[겹모음 생성]
    
    NO_DOUBLE --> COMMIT[현재 음절 commit]
    COMMIT --> NEW[새 음절 시작]
    DOUBLE --> UPDATE[V 갱신]
flowchart TD
    INPUT["자음 입력 (LVT)"] --> CHECK{겹받침 가능?}
    CHECK --> |아니오| NO_DOUBLE[겹받침 불가]
    CHECK --> |예| DOUBLE[겹받침 생성]
    
    NO_DOUBLE --> COMMIT[현재 음절 commit]
    COMMIT --> NEW_L[새 초성으로]
    DOUBLE --> UPDATE[T 갱신]
flowchart TD
    INPUT["모음 입력 (LVT)"] --> CHECK{겹받침?}
    CHECK --> |단받침| SINGLE[단받침 분리]
    CHECK --> |겹받침| DOUBLE[겹받침 분리]
    
    SINGLE --> COMMIT1["commit T=0"]
    DOUBLE --> COMMIT2["commit 첫째만 T"]
    
    COMMIT1 --> NEW1[다음 L + 입력 V]
    COMMIT2 --> NEW2[둘째가 다음 L]

단모음 ㅗ(V=8), ㅜ(V=13), ㅡ(V=18) 뒤에 두 번째 모음을 넣으면 겹모음으로 인식한다. (V 인덱스 0~20 기준.)

1.1 첫 모음 + 두 번째 모음 → 겹모음 V

Section titled “1.1 첫 모음 + 두 번째 모음 → 겹모음 V”
첫 모음 (V)두 번째 키(모음)결과 겹모음V 인덱스
ㅗ (8)9
ㅗ (8)10
ㅗ (8)11
ㅜ (13)14
ㅜ (13)15
ㅜ (13)16
ㅡ (18)19
  • 현재 상태가 “초성+중성”이고 V가 8, 13, 18 중 하나일 때, 다음에 모음 키가 오면 겹모음 조합을 시도한다. 위 표에 (현재 V, 입력 모음) → 새 V가 있으면 V를 갱신하고 preedit을 갱신한다.
  • 위 표에 없는 조합(예: ㅏ 뒤에 ㅗ)이면 현재 음절 commit + 새 (L,V) 로 처리한다. 이때 종성→초성 변환으로 새 L을 정한다(받침 없으면 L=11 ㅇ 등).

종성(T) 은 28가지(0=없음, 127=자모)다. 이 중 겹받침두 자음이 합쳐진 형태로, 유니코드 종성 블록(U+11A8U+11C2)에서 별도 코드 포인트를 가진다.

T코드 포인트자모설명
3U+11AAᆪ (ㄳ)Kiyeok-Sios
5U+11ACᆬ (ㄵ)Nieun-Cieuc
6U+11ADᆭ (ㄶ)Nieun-Hieuh
9U+11B0ᆰ (ㄺ)Rieul-Kiyeok
10U+11B1ᆱ (ㄻ)Rieul-Mieum
11U+11B2ᆲ (ㄼ)Rieul-Pieup
12U+11B3ᆳ (ㄽ)Rieul-Sios
13U+11B4ᆴ (ㄾ)Rieul-Thieuth
14U+11B5ᆵ (ㄿ)Rieul-Phieuph
15U+11B6ᆶ (ㄿ)Rieul-Hieuh
18U+11B9ᆹ (ㅄ)Pieup-Sios

단받침은 초성과 같은 키의 종성 인덱스(T=1,2,4,7,8,…)로 매핑된다. 2벌식에서는 같은 자음 키를 “종성으로” 눌렀을 때 먼저 단받침 T를 시도하고, 같은 키를 한 번 더 누르거나 겹받침 조합이 되면 위 T로 전이하는 방식이 있다(구현에 따라 다름).

2벌식에서 초성+중성 상태에서 자음 키 2개를 연속 입력하면 첫 번째 = 종성 1, 두 번째 = 종성 2로 해석해 겹받침으로 합친다. 단, 유효한 겹받침만 허용한다(ㄳ, ㄵ, ㄶ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅄ).

  • 예: “ㄱ” + “ㅅ” → T=3(ㄳ). “ㄴ” + “ㅈ” → T=5(ㄵ).
  • 유효하지 않은 자음 조합(예: ㄱ+ㄴ)이면 첫 자음만 종성으로 두고, 두 번째 자음다음 음절 초성으로 처리(commit 후 새 L)하는 방식이 많다.

3. 종성(T) → 다음 글자 초성(L) 변환

Section titled “3. 종성(T) → 다음 글자 초성(L) 변환”

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

대부분 단받침 T같은 키의 초성 L과 1:1 또는 규칙으로 대응한다.

T (종성)다음 L (초성)비고
1 ㄱ0 ㄱ
2 ㄲ1 ㄲ
4 ㄴ2 ㄴ
7 ㄷ3 ㄷ
8 ㄹ5 ㄹ
16 ㅁ6 ㅁ
17 ㅂ7 ㅂ
19 ㅅ9 ㅅ
21 ㅇ11 ㅇ
22 ㅈ12 ㅈ
23 ㅊ14 ㅊ
24 ㅋ15 ㅋ
25 ㅌ16 ㅌ
26 ㅍ17 ㅍ
27 ㅎ18 ㅎ

T=3,5,6,9~15,18(겹받침)은 두 글자로 나뉘어 다음 초성으로 쓸 수 있다. 아래 겹받침 → 다음 L 규칙 참고.

3.2 겹받침: T → 다음 L (첫째/둘째 자음)

Section titled “3.2 겹받침: T → 다음 L (첫째/둘째 자음)”

겹받침은 첫째 자음만 다음 초성으로 쓰거나, 둘째 자음만 쓰거나, 발음 규칙에 따라 다르게 쓴다. IME에서는 보통 첫째 자음 = 다음 초성으로 두는 방식이 많다(예: ㄳ → 다음 ㅅ; ㄺ → 다음 ㄱ 또는 ㄹ; 구현에 따라 다름).

T (겹받침)다음 L (초성) 예비고
3 ㄳ9 ㅅㄱ+ㅅ → 다음 ㅅ
5 ㄵ12 ㅈㄴ+ㅈ → 다음 ㅈ
6 ㄶ18 ㅎㄴ+ㅎ → 다음 ㅎ
9 ㄺ0 ㄱ 또는 5 ㄹ구현·발음에 따라
10 ㄻ6 ㅁ
11 ㄼ7 ㅂ
12 ㄽ9 ㅅ
13 ㄾ16 ㅌ
14 ㄿ17 ㅍ
15 ㅀ18 ㅎ
18 ㅄ9 ㅅㅂ+ㅅ → 다음 ㅅ

실제 IME(libhangul 등)는 종성→초성 변환 테이블을 소스에 두고, 위 규칙을 테이블로 구현한다. libhangul 소스의 keyboard·combination 관련 코드를 참고하면 된다.


  • 겹모음: (현재 V=8|13|18) + (입력 모음) → 위 표로 새 V(911, 1416, 19) 결정.
  • 겹받침: 자음 키 2개 시퀀스 → 유효한 T(3,5,6,9~15,18)만 허용.
  • 종성→초성: commit 후 다음 음절 시작 시 T → L 변환표 사용. 단받침은 T→L 1:1, 겹받침은 첫째/둘째 자음 규칙.

한글 조합 원리, 2벌식 알고리즘, 한글 입력기 구현과 함께 참고한다.