본문 바로가기
프로그래밍/Golang

Go언어를 이용한 한글의 결합

by Loper Lee 2020. 9. 8.

한글 문자의 초정, 중성, 종성 결합

지난글에서는 한글의 자모음 분리를 다뤘다.
그리고 거기서 얻게된 분리의 노하우를 통해서 이번에 그반대인 결합에 대해서 알아볼까 한다.(원래 조립은 분리의 역순이다...)

개요

이전 게시글과 마찬가지로 해당 기능또한 라이브러리를 통해서 이용이 가능하다.
긴 글을 만드는게 싫기때문에 우선 본론부터 바로 말하고자 한다.

분리에 대해서

이전 글을 통해서 한글 문자의 구성은 초성, 중성, 종성으로 구성된다는것을 알았다.
그리고 한글문자의 시작과 끝인 [가-핳]을 알게되었다.
최종적으로 무엇보다 중요한 각 부분에 맞는 분리 법칙에 대해서 다뤄보았다.

조립은 분해의 역순

그렇다면 결국 원리는 동일하다. 조립은 분해의 역순이라고 말하듯 해당 식을 토대로 재결합을 구성할 수 있다.

var (
    hangulCHO = []string{"ㄱ", "ㄲ", "ㄴ", "ㄷ", "ㄸ", "ㄹ", "ㅁ", "ㅂ", "ㅃ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅉ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"}
    hangulJUN = []string{"ㅏ", "ㅐ", "ㅑ", "ㅒ", "ㅓ", "ㅔ", "ㅕ", "ㅖ", "ㅗ", "ㅘ", "ㅙ", "ㅚ", "ㅛ", "ㅜ", "ㅝ", "ㅞ", "ㅟ", "ㅠ", "ㅡ", "ㅢ", "ㅣ"}
    hangulJON = []string{"", "ㄱ", "ㄲ", "ㄳ", "ㄴ", "ㄵ", "ㄶ", "ㄷ", "ㄹ", "ㄺ", "ㄻ", "ㄼ", "ㄽ", "ㄾ", "ㄿ", "ㅀ", "ㅁ", "ㅂ", "ㅄ", "ㅅ", "ㅆ", "ㅇ", "ㅈ", "ㅊ", "ㅋ", "ㅌ", "ㅍ", "ㅎ"}
)

저장된 초,중,종성의 데이터를 보자. 그리고 제일 첫번째로 해야할일은 입력된 문자의 위치를 찾는것이다.
가령 아래와 같은 데이터가 입력되었다고 생각해보자

Hangul{Chosung: "ㅇ", Jungsung: "ㅏ", Jongsung: "ㄴ"}

각 문자의 배열의 위치는 손쉽게 알 수 있다.
그냥 반복문을 통해서 검사해보면 된다.

func findIndex(array []string, target string) int {
    ret := -1
    for idx, value := range array {
        if value == target {
            ret = idx
            break
        }
    }
    return ret
}

cho := findIndex(hangulCHO, word.Chosung)   // 11
jun := findIndex(hangulJUN, word.Jungsung)  // 0
jon := findIndex(hangulJON, word.Jongsung)  // 4

필자는 이를 함수로 만들어서 사용했다. 어쨋든 저 초,중,종에는 각 자리에 맞는 값이 들어가게 될것이다.

ret := (588 * rune(cho)) + (28 * rune(jun)) + rune(jon) + hangulBASE
string(ret) // 안

본래는 초성값을 구하기 위해 588을 나눠주었고, 중성값을 구하기 위해 초성을 뺀 종성의 변경값으로 나눠주었다. 마지막으로 종성은 28번째 마다 바뀌는 나머지 값이었기 때문에 그냥 값을 더해준다.
그리고 이 값에 한글의 시작문자인 '가'의 값을 더해주면 최종적으로 모든 문자가 합쳐진 결과값이 나오게 된다.

'프로그래밍 > Golang' 카테고리의 다른 글

Go configration 불러오기  (0) 2020.07.09
Go언어를 사용한 자모음 분리  (0) 2020.07.07
Golang 정규식을 통한 특수문자 제거  (0) 2019.12.13