관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] 한글 문자열 처리 - 초성, 중성, 종성과 유니코드 본문

iOS 응용 (swift)

[iOS - swift] 한글 문자열 처리 - 초성, 중성, 종성과 유니코드

jake-kim 2023. 11. 27. 01:48

초성, 중성, 종성 개념

  • 한글 음절이라는 것이 있고, 한글을 소리나는 단위로 나타낸 것이며 '감', '가', '김'과 같은 하나를 한글 음절 하나라고 의미
    • 한글 음절은 3가지의 첫소리, 가운뎃소리, 끝소리로 나누고 각각을 초성, 중성, 종성이라고 명명
  • 초성: ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ (19개)
  • 중성: ㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣ (21개)
  • 종성: ㄱㄲㄳㄴㄵㄶㄷㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅄㅅㅆㅇㅈㅊㅋㅌㅍㅎ (27개) + ""(empty인 경우를 합하면 총 28개)
  • 한글의 전체 개수: 19 × 21 × ( 27 + 1 ) = 11172

초성, 중성, 종성과 유니코드

  • 글자에 대한 키와 유니크한 숫자 값이 1:1로 맵핑된 코드 테이블
    • "가" 글자는 유니코드로 0xAC0으로 표현

https://www.unicode.org/charts/PDF/UAC00.pdf

  • swift에서는 문자열 앞에 "\u" prefix를 붙이고 대괄호로 감싸면 유니코드를 문자열로 표현이 가능
print("\u{AC00}") // 가
  • 또 반대로 문자열을 유니코드 스칼라로 표현하면, 유니코드 값 획득이 가능
Int("가".unicodeScalars.reduce(0) { $0 + $1.value }) // 44032
  • 10진수로 결과가 나오므로, 16진수로 표현하면 "가" 문자열은 "ac00" 16진수로 표현된다는것을 확인 가능
let unicodeInt = Int("가".unicodeScalars.reduce(0) { $0 + $1.value }) // 44032
let unicode16Int = String(unicodeInt, radix: 16)
print(unicode16Int) // ac00

* 참고

- https://www.unicode.org/charts/PDF/UAC00.pdf

- https://ko.wikipedia.org/wiki/%ED%95%9C%EA%B8%80_%EC%9D%8C%EC%A0%88

Comments