초성/중성/종성을 분리하는 아이디어

1 minute read

글자 코드가 만들어진 순서를 살펴보면 한글 자모 문서의 초성, 중성, 종성을 순서대로 조합하면 한글 음절 문서의 순서와 일치한다. 결국 글자 시작위치를 0으로 생각하고 시작위치에서 한글 자모를 순서대로 조합하면 한글 음절을 완성할수 있다. 이 방법을 역순으로 하면 글자에서 초성, 중성, 종성을 분리할 수 있다.

  • 유니코드 기준 한글 음절 범위 0xAC00~0xD7A3 이다.
  • 초성 범위 ㄱ(0x1100)~ᄒ(0x1112) 총 19개 이다. (옛날 초성 제외)
  • 중성 범위 ㅏ(0x1161)~ㅣ(0x1175) 총 21개 이다. (옛날 중성 제외)
  • 종성 범위 ᆨ(0x11A8)~ᇂ(0x11C2) 27개와 없는것도 하나의 종성이라고 치면 총 28개 이다. (옛날 종성 제외)
  • 가(0xAC00)를 시작으로 588 단위로 초성이 변경된다.
      까(0xAE4C) = 가(0xAC00) + 588
    
  • 가(0xAC00)를 시작으로 28개 단위로 중성이 변경된다.
      객(0xAC1D) = 각(0xAC01) + 28
    
  • 종성은 없을수도 있다.

초성 구하는 방법

  1. 초성의 순서를 구한다. 순서는 0부터 시작한다.
     초성순서 = (글자코드 - 0xAC00) / 588
    
  2. 초성 코드표 시작은 0x1100 부터이다.
  3. 초성의 코드값을 구한다.
     코드값 = 0x1100 + 초성순서
    

중성 구하는 방법

  1. 초성을 제외 시킨다.
     초성을 제외한 값 = (글자코드 - 0xAC00) % 588
    
  2. 중성의 순서를 구한다. 순서는 0부터 시작한다.
     중성순서 = 초성을 제외한 값 / 28
    
  3. 중성 코드표 시작은 0x1161 부터이다.
  4. 중성의 코드값을 구한다.
     코드값 = 0x1161 + 중성순서
    

종성 구하는 방법

  1. 종성 순서를 구한다. 순서는 0부터 시작한다.
     종성순서 = (글자코드 - 0xAC00) % 28
    
  2. 종성 코드표 시작은 0x11A8이지만 종성은 없을수도 있어서 0x11A7에서 시작한다.
  3. 종성의 코드값을 구한다.
     코드값 = 0x11A7 + 종성순서
    
  4. 종성 코드값이 0x11A7이라면 종성이 존재하지 않는 것이다. (예: 아)

입력값(Hangul Compatibility Jamo) 자모 범위

  • 입력값으로 사용할때는 한글호환성 자모 범위의 값으로 사용된다. 입력범위는 0x3130 ~ 0x318F 이다.
  • 초성의 범위는 ㄱ(0x3131) ~ ㅎ(0x314E) 이다.
  • 문제는 한글 자모 문서와 순서가 일치하지 않는다는 것에 있다. 결국 맵핑 테이블을 별도로 만들어야 한다.

마치며

초성검색을 하는 자바소스는 여기서 확인할 수 있다.

Categories:

Updated:

Leave a comment