초성/중성/종성을 분리하는 아이디어
글자 코드가 만들어진 순서를 살펴보면 한글 자모 문서의
초성
,중성
,종성
을 순서대로 조합하면 한글 음절 문서의 순서와 일치한다. 결국가
글자 시작위치를 0으로 생각하고 시작위치에서 한글 자모를 순서대로 조합하면 한글 음절을 완성할수 있다. 이 방법을 역순으로 하면 글자에서초성
,중성
,종성
을 분리할 수 있다.
- 유니코드 기준 한글 음절 범위
0xAC00
~0xD7A3
이다. - 초성 범위 ㄱ(
0x1100
)~ᄒ(0x1112
) 총 19개 이다. (옛날 초성 제외) - 중성 범위 ㅏ(
0x1161
)~ㅣ(0x1175
) 총 21개 이다. (옛날 중성 제외) - 종성 범위 ᆨ(
0x11A8
)~ᇂ(0x11C2
) 27개와 없는것도 하나의 종성이라고 치면 총 28개 이다. (옛날 종성 제외) - 가(
0xAC00
)를 시작으로588
단위로 초성이 변경된다.까(0xAE4C) = 가(0xAC00) + 588
- 가(
0xAC00
)를 시작으로28
개 단위로 중성이 변경된다.객(0xAC1D) = 각(0xAC01) + 28
- 종성은 없을수도 있다.
초성 구하는 방법
- 초성의 순서를 구한다. 순서는 0부터 시작한다.
초성순서 = (글자코드 - 0xAC00) / 588
- 초성 코드표 시작은
0x1100
부터이다. - 초성의 코드값을 구한다.
코드값 = 0x1100 + 초성순서
중성 구하는 방법
- 초성을 제외 시킨다.
초성을 제외한 값 = (글자코드 - 0xAC00) % 588
- 중성의 순서를 구한다. 순서는 0부터 시작한다.
중성순서 = 초성을 제외한 값 / 28
- 중성 코드표 시작은
0x1161
부터이다. - 중성의 코드값을 구한다.
코드값 = 0x1161 + 중성순서
종성 구하는 방법
- 종성 순서를 구한다. 순서는 0부터 시작한다.
종성순서 = (글자코드 - 0xAC00) % 28
- 종성 코드표 시작은
0x11A8
이지만 종성은 없을수도 있어서0x11A7
에서 시작한다. - 종성의 코드값을 구한다.
코드값 = 0x11A7 + 종성순서
- 종성 코드값이
0x11A7
이라면 종성이 존재하지 않는 것이다. (예: 아)
입력값(Hangul Compatibility Jamo
) 자모 범위
- 입력값으로 사용할때는 한글호환성 자모 범위의 값으로 사용된다. 입력범위는
0x3130
~0x318F
이다. - 초성의 범위는 ㄱ(
0x3131
) ~ ㅎ(0x314E
) 이다. - 문제는 한글 자모 문서와 순서가 일치하지 않는다는 것에 있다. 결국 맵핑 테이블을 별도로 만들어야 한다.
마치며
초성검색을 하는 자바소스는 여기서 확인할 수 있다.
Leave a comment