🔥 문자열의 문자 수 세기

311자
4분

Swift에서는 문자열의 문자 수를 세는 방법이 매우 간단합니다. 바로 문자열의 count 속성을 사용하면 됩니다.

swift
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
print("unusualMenagerie has \(unusualMenagerie.count) characters")
// "unusualMenagerie has 40 characters" 출력
swift
let unusualMenagerie = "Koala 🐨, Snail 🐌, Penguin 🐧, Dromedary 🐪"
print("unusualMenagerie has \(unusualMenagerie.count) characters")
// "unusualMenagerie has 40 characters" 출력

위 코드에서는 unusualMenagerie라는 문자열을 선언하고, 해당 문자열의 count 속성을 출력하고 있습니다. 출력 결과를 보면 unusualMenagerie 문자열은 총 40개의 문자로 이루어져 있다는 것을 알 수 있죠.

하지만 여기서 주의할 점이 있습니다. Swift에서는 확장된 자소 클러스터(extended grapheme clusters)를 사용하여 Character 값을 표현하기 때문에, 문자열 연결이나 수정이 항상 문자 수에 영향을 미치지는 않습니다.

예를 들어, 4글자 단어 "cafe"로 새로운 문자열을 초기화한 다음 COMBINING ACUTE ACCENT(U+0301)를 문자열 끝에 추가하면, 결과 문자열은 여전히 문자 수가 4개입니다. 네 번째 문자는 e가 아니라 é가 되는 거죠.

swift
var word = "cafe"
print("the number of characters in \(word) is \(word.count)")
// "the number of characters in cafe is 4" 출력
 
word += "\\u{301}"    // COMBINING ACUTE ACCENT, U+0301
 
print("the number of characters in \(word) is \(word.count)")
// "the number of characters in café is 4" 출력
swift
var word = "cafe"
print("the number of characters in \(word) is \(word.count)")
// "the number of characters in cafe is 4" 출력
 
word += "\\u{301}"    // COMBINING ACUTE ACCENT, U+0301
 
print("the number of characters in \(word) is \(word.count)")
// "the number of characters in café is 4" 출력

위 코드에서 word 변수는 초기에 "cafe"로 설정되었습니다. 이때 word의 문자 수는 4개입니다.

그런 다음 COMBINING ACUTE ACCENT(U+0301)를 word 변수에 추가했습니다. 이 문자는 이전 문자와 결합되어 하나의 문자로 취급되므로, word의 문자 수는 여전히 4개로 유지됩니다. 다만 마지막 문자가 e에서 é로 변경되었을 뿐이죠.

이처럼 Swift에서는 문자열 연결이나 수정 시 확장된 자소 클러스터를 사용하기 때문에, 직관적이지 않은 결과가 나올 수 있습니다. 따라서 문자열을 다룰 때는 이 점을 유의해야 합니다.

이해를 돕기 위해 문자열의 문자 수 변화를 그래프로 나타내 보겠습니다.

text
문자열      문자 수
 café         4

 cafe         4

  ca          2

  c           1

  (empty)     0
text
문자열      문자 수
 café         4

 cafe         4

  ca          2

  c           1

  (empty)     0

위 그래프에서 보듯이, 문자열 끝에 결합 문자를 추가해도 문자 수는 변하지 않습니다. 오직 문자열에 새로운 문자를 추가할 때만 문자 수가 증가하는 것을 확인할 수 있습니다.

이상으로 Swift에서 문자열의 문자 수를 세는 방법과 그 특징에 대해 알아보았습니다. 확장된 자소 클러스터로 인한 직관적이지 않은 동작에 유의하면서, count 속성을 사용해 보세요!

YouTube 영상

채널 보기
NestJS 커스텀 데코레이터 인자 전달 및 파이프 검증 활용법 | NestJS 가이드
Writer 펑터와 클라이슬리 카테고리 | 프로그래머를 위한 카테고리 이론
NestJS 커스텀 데코레이터, createParamDecorator 사용 | NestJS 가이드
NestJS 인터셉터에서 map 연산자로 응답을 변환하는 방법 | NestJS 가이드
NestJS 인터셉터란? | NestJS 가이드
NestJS 가드, 바이딩과 스코프 | NestJS 가이드
API 응답 지연과 복잡한 에러, NestJS 인터셉터로 관리하는 방법 | NestJS 가이드
Pro펑터, 입력과 출력을 동시에 다루는 펑터 | 프로그래머를 위한 카테고리 이론