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