🔥 문자열의 문자 수 세기

311자
4분

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

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

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

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

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

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

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

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

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

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

문자열      문자 수
 café         4

 cafe         4

  ca          2

  c           1

  (empty)     0
text

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

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