🔤 한글 자모 분리기 (초성·중성·종성 분리 · 합치기)
한글을 ㅎㅏㄴㄱㅡㄹ처럼 자모로 풀고, 풀어 쓴 자모를 다시 글자로 합쳐요. 겹받침·겹모음까지 나누고 자모 수도 세어 줘요.
사용법
- 왼쪽 칸에 한글 문장을 넣고 분리를 고르면, 글자마다 초성·중성·종성으로 풀어서 보여 줘요. "한글"은 ㅎㅏㄴㄱㅡㄹ가 돼요.
- 겹받침·겹모음까지 풀기를 켜면 ㄺ → ㄹㄱ, ㅘ → ㅗㅏ처럼 두 자모가 합쳐진 글자도 나눠요. 쌍자음(ㄲ·ㄸ·ㅃ·ㅆ·ㅉ)은 자판에서 한 번에 치는 한 글자라 그대로 둬요.
- 글자마다 / 넣기를 켜면 ㄱㅏㅄ/ㅆㅏㄴ처럼 원래 어느 글자였는지 경계가 보여요.
- 풀어 쓴 자모를 다시 글자로 만들려면 합치기를 골라요. 결과의 '입력으로 옮기기'를 누르면 분리 ↔ 합치기를 오가며 확인할 수 있어요.
- 아래 숫자 칸에 한글 글자 수, 초성·중성·받침 개수, 자모 수가 나와요. 자모 수는 겹자모를 풀었는지에 따라 달라져요.
한글 한 글자는 어떻게 만들어지나
컴퓨터의 한글 글자(완성형)는 초성 19개 × 중성 21개 × 종성 28개(받침 없음 포함) = 11,172자가 '가'(U+AC00)부터 '힣'(U+D7A3)까지 정해진 순서로 놓여 있어요. 그래서 글자 번호만 알면 계산으로 자모를 꺼낼 수 있고, 반대로 자모 번호로 글자를 만들 수도 있어요. 이 규칙은 유니코드 표준 3.12절 'Conjoining Jamo Behavior'에 정의돼 있어요.
| 구분 | 개수 | 순서 (번호 0부터) |
|---|---|---|
| 초성 | 19 | ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ |
| 중성 | 21 | ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ |
| 종성 | 28 | (없음) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ |
분리·합치기 공식
글자 코드 = 0xAC00 + (초성 번호 × 21 + 중성 번호) × 28 + 종성 번호예요. 거꾸로 풀 때는 글자 코드에서 0xAC00(10진수 44,032)을 뺀 값 k로 초성 = k ÷ 588의 몫, 중성 = (k ÷ 28의 몫) ÷ 21의 나머지, 종성 = k ÷ 28의 나머지를 구해요. 588은 중성 21 × 종성 28이에요.
| 단계 | "한" 풀기 | "글" 풀기 |
|---|---|---|
| 글자 코드 | U+D55C = 54,620 | U+AE00 = 44,544 |
| k = 코드 − 44,032 | 10,588 | 512 |
| 초성 = k ÷ 588의 몫 | 18 → ㅎ | 0 → ㄱ |
| 중성 = (k ÷ 28의 몫) mod 21 | 378 mod 21 = 0 → ㅏ | 18 mod 21 = 18 → ㅡ |
| 종성 = k mod 28 | 4 → ㄴ | 8 → ㄹ |
| 검산 | 44,032 + (18×21+0)×28 + 4 = 54,620 | 44,032 + (0×21+18)×28 + 8 = 44,544 |
실제로 돌린 분리 예시
아래 표는 이 페이지의 코드로 직접 돌린 결과예요. 가운데 열은 기본 분리에 '글자마다 / 넣기'를 켠 결과, 오른쪽 열은 겹받침·겹모음까지 푼 결과예요.
| 입력 | 기본 분리 (/ 표시) | 겹자모까지 풀기 | 자모 수 |
|---|---|---|---|
| 닭갈비 | ㄷㅏㄺ/ㄱㅏㄹ/ㅂㅣ | ㄷㅏㄹㄱㄱㅏㄹㅂㅣ | 8 → 9 |
| 값싼 꽃 | ㄱㅏㅄ/ㅆㅏㄴ ㄲㅗㅊ | ㄱㅏㅂㅅㅆㅏㄴ ㄲㅗㅊ | 9 → 10 |
| 의자 | ㅇㅢ/ㅈㅏ | ㅇㅡㅣㅈㅏ | 4 → 5 |
| 읽었다 | ㅇㅣㄺ/ㅇㅓㅆ/ㄷㅏ | ㅇㅣㄹㄱㅇㅓㅆㄷㅏ | 8 → 9 |
| 뷁 | ㅂㅞㄺ | ㅂㅜㅔㄹㄱ | 3 → 5 |
"뷁"처럼 겹모음(ㅞ)과 겹받침(ㄺ)이 한꺼번에 든 글자는 기본 분리로는 자모 3개지만, 끝까지 풀면 ㅂ·ㅜ·ㅔ·ㄹ·ㄱ 5개가 돼요. 두벌식 자판으로 이 글자를 칠 때 누르는 키 수도 5번이에요.
가나다 순서와 자모 번호
완성형 한글이 놓인 순서는 국어사전의 가나다 순서와 같아요. 한글 맞춤법 제4항은 사전에 올릴 때 자모 순서를 초성 ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ, 중성 ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ로 정해 두었는데, 위 표의 번호 순서와 똑같아요. 그래서 프로그램에서 한글 문자열을 코드 값으로만 정렬해도 대부분 사전 순서가 나오고, 쌍자음 ㄲ이 ㄱ과 ㄴ 사이에 오는 것도 그 때문이에요. 숫자·영어가 섞인 목록을 사람이 보기 좋게 정렬하려면 텍스트 줄 정렬기를 써 보세요.
합치기는 이렇게 동작해요
합치기는 두벌식 자판으로 칠 때와 같은 순서로 글자를 모아요. 자음 다음 모음이 오면 한 글자를 시작하고, 그 뒤 자음은 일단 받침으로 넣었다가 다음에 모음이 오면 그 자음을 다음 글자의 초성으로 넘겨요. 그래서 ㄷㅏㄹㄱㅣ는 "닭이"가 아니라 "달기"로 모여요(ㄺ 중 ㄱ이 넘어감). "닭이"를 만들려면 소리 나는 대로가 아니라 글자대로 ㄷㅏㄹㄱㅇㅣ처럼 초성 ㅇ을 넣으면 돼요. ㄱ 다음에 자음 ㅇ이 와서 ㄺ이 받침으로 남아요.
| 넣은 자모 | 결과 | 설명 |
|---|---|---|
| ㅎㅏㄴㄱㅡㄹ | 한글 | ㄴ 뒤에 자음 ㄱ이 와서 ㄴ은 받침으로 남음 |
| ㅇㅏㄴㄴㅕㅇ | 안녕 | 같은 자음 두 개는 받침 + 다음 초성 |
| ㄷㅏㄹㄱㅇㅣ | 닭이 | ㄹ+ㄱ → 겹받침 ㄺ, 다음 ㅇ이 초성 |
| ㄷㅏㄹㄱㅣ | 달기 | 모음 ㅣ가 오면 ㄱ이 다음 글자 초성으로 넘어감 |
| ㄱㅗㅏ | 과 | ㅗ+ㅏ → 겹모음 ㅘ |
| ㅋㅋㅋ ㅠㅠ | ㅋㅋㅋ ㅠㅠ | 모음 없는 자음, 자음 없는 모음은 낱자로 둠 |
코드로 직접 구현하기
개발 중에 같은 계산이 필요하다면 아래 몇 줄이면 돼요. 자바스크립트 기준이고, 파이썬도 ord()·chr()로 똑같이 옮길 수 있어요. 받침 없는 글자는 종성 번호가 0이라 빈 문자열이 나와요.
const CHO = 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ';
const JUNG = 'ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ';
const JONG = ['', ...'ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ'];
function split(ch) {
const k = ch.charCodeAt(0) - 0xAC00; // '가'부터 몇 번째 글자인지
if (k < 0 || k > 11171) return [ch]; // 완성형 한글이 아니면 그대로
return [CHO[Math.floor(k / 588)], JUNG[Math.floor(k / 28) % 21], JONG[k % 28]];
}
function join(l, v, t = '') {
return String.fromCharCode(0xAC00 + (CHO.indexOf(l) * 21 + JUNG.indexOf(v)) * 28 + JONG.indexOf(t));
}
split('한'); // ['ㅎ', 'ㅏ', 'ㄴ']
join('ㄱ', 'ㅡ', 'ㄹ'); // '글'
받침 유무로 조사를 고르는 기능(을/를, 이/가, 은/는)도 같은 원리예요. 마지막 글자의 k % 28이 0이면 받침이 없으니 '를·가·는', 0이 아니면 '을·이·은'을 붙이면 돼요.
겹받침 11개 · 겹모음 7개
| 종류 | 목록 |
|---|---|
| 겹받침 | ㄳ(ㄱㅅ) ㄵ(ㄴㅈ) ㄶ(ㄴㅎ) ㄺ(ㄹㄱ) ㄻ(ㄹㅁ) ㄼ(ㄹㅂ) ㄽ(ㄹㅅ) ㄾ(ㄹㅌ) ㄿ(ㄹㅍ) ㅀ(ㄹㅎ) ㅄ(ㅂㅅ) |
| 겹모음 | ㅘ(ㅗㅏ) ㅙ(ㅗㅐ) ㅚ(ㅗㅣ) ㅝ(ㅜㅓ) ㅞ(ㅜㅔ) ㅟ(ㅜㅣ) ㅢ(ㅡㅣ) |
| 받침이 될 수 없는 자음 | ㄸ ㅃ ㅉ — 그래서 ㅇㅏㄸ은 "앋"이 아니라 "아ㄸ"으로 남아요 |
ㅐ·ㅔ·ㅒ·ㅖ는 모양은 두 획이 붙어 있지만 두벌식 자판에서 한 키로 치는 기본 모음이라 겹모음으로 나누지 않았어요.
어디에 쓰나
- 자모 단위 검색·정렬 — "ㄷㅏㄹ"까지만 쳐도 "닭갈비"가 찾아지게 하려면 검색어와 목록을 모두 자모로 풀어 비교해요. 초성만 뽑으려면 초성 추출기가 더 간단해요.
- 단어 퍼즐·게임 만들기 — 한글 워들처럼 자모 칸을 맞히는 퀴즈를 만들 때 정답 단어의 자모 수를 세요. 사이트의 꼬들도 두 글자 낱말을 자모 6칸으로 풀어요.
- 한글 교육 — 받침이 있는 글자와 없는 글자, 겹받침이 든 낱말을 눈으로 나눠 보여 줄 때.
- 개발 테스트 — 입력기·검색 기능을 만들 때 기대값을 빠르게 확인해요. 같은 글자도 완성형(가)과 풀어 쓴 조합형(ᄀ+ᅡ) 코드가 다르면 검색이 안 되는 문제가 생기는데, 이 도구는 완성형 글자와 호환 자모(ㄱ·ㅏ, U+3131~U+3163)만 다뤄요.
흔한 실수
- 맥에서 복사한 파일 이름의 한글이 안 풀림 — macOS 파일 이름은 한글을 첫가끝 조합형(NFD)으로 저장하는 경우가 있어 완성형이 아니에요. 이런 글자는 그대로 남아요.
- 겹받침을 풀고 다시 합쳤더니 글자가 달라짐 — ㄹㄱ 뒤에 모음이 바로 오면 ㄱ이 다음 글자로 넘어가요. 원래 글자로 돌리려면 '글자마다 / 넣기'로 경계를 표시해 두면 합칠 때 /가 지워지며 다시 모여요.
- 자모 수를 타수로 착각 — 자모 수는 글자를 이룬 자모 개수예요. 자판 타수는 쌍자음을 Shift로 치는 등 방식이 달라 다를 수 있어요.
모든 처리는 이 브라우저 안에서 하고, 넣은 글은 저장하거나 밖으로 보내지 않아요. 11,172자 모두 분리 → 합치기 왕복이 원래 글자로 돌아오는 것을 확인한 코드예요. 조합 규칙은 유니코드 표준 3장(3.12 Conjoining Jamo Behavior)에 있어요.