🔥 문자열의 문자 수 세기

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 가이드
Git Worktree로 여러 피처 동시에 개발하기 | AI 코딩 시대의 필수 스킬
NestJS 가드, 바이딩과 스코프 | NestJS 가이드
NestJS 빌트인 파이프 ParseIntPipe, ParseUUIDPipe 사용하기 | NestJS 가이드
펑터 합성 | 프로그래머를 위한 카테고리 이론
NestJS 파이프가 뭔가요? 컨트롤러를 보호하는 방법 | NestJS 가이드
미들웨어 vs 가드, 왜 NestJS에서는 가드가 더 똑똑할까? | NestJS 가이드