[iOS] 한글 관련 프로퍼티 톺아보기

hangul 만 보이면 냅다 알아보는 한글 집착 광공의 여정 🫠

naljin
10 min readApr 12, 2022

여정의 시작 🚗

개-하! wholeNumberValue 프로퍼티에 대해 알고 계신가요?

대충 character 가 "0", "1", "2" 같이 음이 아닌 정수 를 나타낸다면 이 프로퍼티를 통해서 Int 로 변환해줄 수 있음요! 스위프트로 알고리즘 풀때 간간이 쓰는듯여?

여기서 꽤나 신기한건 ④ 나 万 같은것도 바꿔준다는거?? 万 은 간체자니까, 번체자 萬 으로 테스트해봐도 Optional(10000) 반환함요!

오호.. 그럼 숫자 이모지도 변환 되나?

let luckySeven: Character = "7️⃣"
print(luckySeven.wholeNumberValue) // nil

어림 없네. nil

그럼 “만” 이라는 한글은????????

let man: Character = "만"
print(man.wholeNumberValue) // nil

어림 없지 2222222222

이제 저의 의식은 이렇게 흐릅니다

🤔 흠.. 너무하넹.. “만”이라는 글자만으로는 숫자를 나타내지 않는다고 생각하는건가?? 아니면 “만” 이 어차피 “萬” 에서 온거니까 한중일 퉁쳐서 한자만 지원해주기로 한건가??

👉🏻 어쨌든 "만".wholeNumberValue 가 안돼버리네..? 아니.. 한글 무시해?

👉🏻 근데 애플에서 뭐 한글 특화해서 지원해주는 프로퍼티 있었던거 같은데..??

👉🏻 냅다 hangul 검색. 근데 왜 스펠링이 한굴이지..? 한글.. 한굴.. 한굴.. 튼..

👉🏻 헉 맞아 내가 알던건 제일 상위에 나오는 hangulWordPriority 였쥐

👉🏻 근데.. 밑에 keyboardHangul 도 있고 latinToHangul 도 있고.. 한글 관련된 프로퍼티가 이거 말고 더 있었네??

👉🏻 뭐지?! 한개씩 알아보자 ㅇ0ㅇ!

ㅋㅎ… 그래서 오늘 글이 나오게 되었습니다. 그럼 한개씩 알아봅시다 ㄱㄱ

iOS 의 한글 관련 프로퍼티 🇰🇷

hangulWordPriority

얘는 기본적으로 NSParagraphStyle.LineBreakStrategy 의 타입 프로퍼티예여 (iOS14 부터 등장!)

그니까 줄바꿈이랑 관련된거라는걸 유추할 수 있겠죠?

설명에는 한글 character 간 분리를 방지한다고 되어있습니다.

뭔 말이냐면! 옛날에는 이런식으로 한글이 그지같이 줄바꿈이 되었어요

특히 마지막 줄 대체 어디서 끊는건쥐..?

짤을 이해했다면 당신도 꽤나 인터넷 인간

이때 아래처럼 lineBreakStrategy 를 지정하면

자연스럽게 단어 단위로 라인이 분리되는 것을 볼 수 있습니당

근데 지금 테스트해보니 따로 hangulWordPriority 지정을 안해줘도 예쁘게 잘 나오네요?? 요즘은 걍 한글이 들어가면 알맞게 라인이 분리되나봐요? ㅎ

걍 애초에 이렇게 잘 나온다는거 ㅇㅇ

???: 그럼 내 기억 속에서 잊고 살아가면 되냐?

ㄴㄴ 그건 아님요. NSMutableParagraphStyle 등을 생성해서 사용하는 상황에서는 아래처럼 따로 명시해줘야함여

NSParagraphStyle / NSMutableParagraphStyle 안에 있는 lineBreakStrategy 디폴트 값이 NSLineBreakStrategyNone 래여. 그래서 따로 lineBreakStrategy 지정을 안해주면 한글이 못생기게 보여욤.

latinToHangul

보자마자 꽤나 흥미로워 보여서 헉 했던 프로퍼티입니다. 딱 봐도 뭔가 영어 👉🏻 한글로 바꿔줄거 같져?

StringTransform 의 type property 로, 라틴어 👉🏻 한글 음역을 나타내는 식별자예요.

요 프로퍼티는 NSString 이나 StringProtocol 의 메서드인 applyingTransform(_:reverse:) 에 매개 변수로 들어가는디요, 냅다 테스트해보져!

옆에 찍힌 값을 보면 진짜 라틴 문자를 한글로 음역해주네요 ㅇ0ㅇ!!

참고로 latinToHangul 은 Objective-C 에서 NSStringTransformLatinToHangul 또는 kCFStringTransformLatinHangul 로 대응됩니다.

StringTransform 을 보면 latinToHangul 말고도 latinToHiriganalatinToThai 등 옵션이 다양한디요, 흠.. 중국어는 없는거 보니.. 표음문자만 지원하는걸까요?? 다른 언어는 잘 몰라서 ㅎ.. 머가 중요하겠어여 한글을 지원한다는게 중요하지~

튼 이 중에는 toLatin 프로퍼티도 있는데여, 딱봐도 영어로 음역해줄거 같져?

껄껄 잘되네여

이때 갑자기 기본 언어가 한국어로 설정된 아이폰에서 你叫什么名字 라는 중국어를 voice over 로 어떻게 읽을까 궁금해졌어요.

중국어로는 “니 짜오 션머 밍즈” 라고 발음하는데, 실제로는 “니 규집 마 명자” 라는 한자로 읽더라고요 ㅎ 머 오히려 당연한 결과겠죠..?

그래서 mandarinToLatin 옵션을 이용해서 중국어를 영어로 바꾼 다음에, 이걸 다시 한글로 바꿨더니 한자 발음 대신 중국어 발음 비슷하게 변환되었습니다.

여기서 신기했던건

  1. 중 👉🏻 영 변환 결과가 성조도 같이 표기되는 한어 병음임
  2. 이걸 다시 한글로 바꾸면 한글 위에도 성조 같은게 표시 됨

요렇게 성조에 관한건데요, 처음에 한글 부분 모니터에 먼지 뭍은줄 알고 닦았는데 먼지가 아니었음여;;

작게 봤을때 먼지인줄;

그럼 성조가 없는 단순 영어 문자열을 한글로 변환하면 결과가 바뀌나? 해서 테스트해봤슴다.

그리고 결과는 좀 바꼈어요 (ex. 스헤느 👉🏻 스헨, 미늑 👉🏻 밍). 이게 좀 더 중국어 발음과 비슷한거 같아욤

ㅇㅋ 다음

keyboardHangul

한국어 키보드의 LANG1 키에 대한 별칭입니다

??? : LANG1 키가 뭔데???

first language key 에 대한 키보드 코드입니다. 한글 키보드에서 이 코드는 한 / 영 토글 키를 뜻한대요

추가로 얘 생긴걸 보면 UIKeyboardHIDUsage 의 type property 로 정의되어있는데요,

UIKeyboardHIDUsage 는 USB 키보드의 키를 식별하는 HID 사용 코드 set 을 정의해둔 곳이라고 합니다.

인간 인터페이스 장치(Human interface device, HID)란 컴퓨터 주변 기기 중 사용자 인터페이스를 담당하는 것을 뜻합니다. 즉 대부분은 인간으로부터 입력을 받으며, 일부는 출력 기능을 갖추기도 합니다. 한편 인간 인터페이스 장치(HID)라는 용어는 대개 USB의 장치 규격 중 하나인 USB 인간 인터페이스 장치 유형을 가리킵니다.

평범한 iOS 개발만 한다면.. 크게 볼 일 없을 친구 같네여.. ◠‿◠

ㅇㅋ 다음

CFStringEncodings.dosKorean

코드 페이지 949 (Windows 도 겸용). Unified Hangul Code.

이게 뭔..? 싶어서 Unified Hangul Code 로 구글링 해봤더니 바로 코드 페이지 949 (Unified Hangul Code) 가 나왔습니다.

근데 저는 코드 페이지부터 뭔지 모르겠는디요;; 마이크로소프트 코드 페이지 문서 먼저 가보져

코드 페이지는 숫자, 문장 부호 및 기타 문자를 포함할 수 있는 문자 집합입니다. 언어 및 지역마다 다른 코드 페이지를 사용할 수 있습니다. 예를 들어 ANSI 코드 페이지 1252는 미국 영어와 대부분의 유럽 언어에 사용되고, OEM 코드 페이지 932는 일본어 간지에 사용됩니다.

오호.. 그럼 CFStringEncodings.dosKorean 은 한국어 인코딩 할때 필요한.. 코드페이지를 찾기 위한 상수인가봐요..?

참고로 여기 글을 보면 윈도우에서 특정 일본어가 깨져서 나오는 경우에 CHCP(CHange Code Page) 명령어를 이용해서 일본어에 해당하는 코드 페이지 (932)로 바꿨더니 정상적으로 표시되었대요. 대신 한국어는 깨져서 나오고요 ㅇ0ㅇ!

chcp [<nnn>] //<nnn> 에 코드 페이지를 지정

먼가 코드 페이지에 대한 감이 좀 잡힐 것 같네여..!

어쩌다 여기까지 오게 됐지만,, 얘도 평범한 iOS 개발만 한다면.. 크게 볼 일 없을 친구 같습니다..? ㅎㅎ ◠‿◠

마무리

한글 집착 광공의 여정.. 재밌게 보셨나요..??

좀 길긴 했지만, 직접 사용하는 언어와 관련되어 있어서 흥미롭게 살펴봤네요 ㅎㅎ

그럼.. 오늘도 급하게 마무리..!!! 모두 안녕!!!!!!1

참고

wholeNumberValue

hangulWordPriority

latinToHangul

keyboardHangul

CFStringEncodings.dosKorean

--

--

Responses (2)