🔥 Unicode
Unicode는 다양한 언어의 텍스트를 인코딩, 표현 및 처리하기 위한 국제 표준이에요. 거의 모든 언어의 문자를 표준화된 형식으로 표현할 수 있게 해주며, 외부 소스(예: 텍스트 파일 또는 웹 페이지)에서 해당 문자를 읽고 쓸 수 있죠. Swift의 String
과 Character
타입은 이 섹션에서 설명하는 바와 같이 완벽하게 Unicode를 준수합니다.
Unicode 스칼라 값
Swift의 기본 String
타입은 내부적으로 Unicode 스칼라 값
으로 구성되어 있어요. Unicode 스칼라 값은 문자나 수정자에 대한 고유한 21비트 숫자인데요, 예를 들어 LATIN SMALL LETTER A
("a"
)의 경우 U+0061
, FRONT-FACING BABY CHICK
("🐥"
)의 경우 U+1F425
와 같습니다.
모든 21비트 Unicode 스칼라 값이 문자에 할당되는 것은 아니에요. 일부 스칼라는 향후 할당을 위해 예약되어 있거나 UTF-16 인코딩에 사용되기도 합니다. 문자에 할당된 스칼라 값은 일반적으로 위의 예시처럼 LATIN SMALL LETTER A
나 FRONT-FACING BABY CHICK
와 같은 이름도 가지고 있죠.
확장 자소 클러스터
Swift의 Character
타입의 모든 인스턴스는 단일 확장 자소 클러스터
를 나타내요. 확장 자소 클러스터는 하나 이상의 Unicode 스칼라 시퀀스로, 결합되면 사람이 읽을 수 있는 단일 문자를 생성합니다.
예를 들어볼게요. 문자 é
는 단일 Unicode 스칼라 é
(LATIN SMALL LETTER E WITH ACUTE
, 또는 U+00E9
)로 표현될 수 있어요. 그러나 같은 문자를 표준 문자 e
(LATIN SMALL LETTER E
또는 U+0065
) 다음에 COMBINING ACUTE ACCENT
스칼라(U+0301
)가 오는 스칼라 쌍
으로 표현할 수도 있죠. COMBINING ACUTE ACCENT
스칼라는 앞의 스칼라에 그래픽으로 적용되어 Unicode 인식 텍스트 렌더링 시스템에서 렌더링될 때 e
를 é
로 바꿉니다.
두 경우 모두 문자 é
는 확장 자소 클러스터를 나타내는 단일 Swift Character
값으로 표현돼요. 첫 번째 경우에는 클러스터에 단일 스칼라가 포함되고, 두 번째 경우에는 두 개의 스칼라 클러스터죠:
let eAcute: Character = "\\u{E9}" // é let combinedEAcute: Character = "\\u{65}\\u{301}" // e 다음에 ́ // eAcute는 é, combinedEAcute는 é
swift
확장 자소 클러스터는 많은 복잡한 스크립트 문자를 단일 Character
값으로 유연하게 표현할 수 있는 방법이에요. 예를 들어, 한글 음절은 사전 구성되거나 분해된 시퀀스로 표현될 수 있는데요, 이 두 표현 모두 Swift에서 단일 Character
값으로 인정됩니다:
let precomposed: Character = "\\u{D55C}" // 한 let decomposed: Character = "\\u{1112}\\u{1161}\\u{11AB}" // ᄒ, ᅡ, ᆫ // precomposed는 한, decomposed도 한
swift
확장 자소 클러스터를 사용하면 다른 Unicode 스칼라를 단일 Character
값의 일부로 둘러싸는 둘러싸는 표시(COMBINING ENCLOSING CIRCLE
또는 U+20DD
등)에 대한 스칼라를 사용할 수 있어요:
let enclosedEAcute: Character = "\\u{E9}\\u{20DD}" // enclosedEAcute는 é⃝
swift
지역 표시기 기호에 대한 Unicode 스칼라는 REGIONAL INDICATOR SYMBOL LETTER U
(U+1F1FA
)와 REGIONAL INDICATOR SYMBOL LETTER S
(U+1F1F8
)의 조합과 같이 쌍으로 결합하여 단일 Character
값을 만들 수 있습니다:
let regionalIndicatorForUS: Character = "\\u{1F1FA}\\u{1F1F8}" // regionalIndicatorForUS는 🇺🇸
swift
이렇게 Unicode는 다양한 언어의 문자를 표현하고 처리하는 데 있어 매우 강력하고 유연한 표준이랍니다. Swift에서는 String
과 Character
타입을 통해 이를 완벽히 지원하고 있으니, Unicode의 장점을 잘 활용할 수 있겠죠?