[Swift] String 좀 더 알아보기 (2)
[Swift] String 좀 더 알아보기 (2)
안녕하세요. 오늘은 Swift의 String
에 대해 더욱 깊게 알아보는 시간을 갖도록 하겠습니다. 이 글을 읽기 전 제가 이전에 쓴 String 좀 더 알아보기 (1) 를 보고 오시면 도움이 될 것입니다.
지난 포스팅에서 제가 Swift에서 String
은 각각의 문자에 대해 다른 언어들과 다르게 정수의 인덱스로 접근이 불가능하다고 살짝 언급하였습니다. ex) String[2]
오늘은 이러한 이유에 대해 공부해도록 하겠습니다.
Unicode Scalars
Unicode : Unicode는 각기 다른 입력 시스템의 문자를 인코딩, 표현, 처리하기 위한 국제적인 표준입니다. Unicode로는 모든 언어의 거의 모든 문자를 표현하고 텍스트 파일이나 웹 페이지와 같은 외부 소스에서 문자를 읽고 쓸 수 있습니다.
Swift의 String
기본적으로 Unicode Scalar 값으로 이루어져 있습니다. 그리고 이런 Unicode Scalar를 조합하여 하나의 문자를 만들어 낼 수도 있습니다.
예를 들어 두 개의 Unicode Scalar를 조합하면 하나의 문자가 되는 경우도 존재합니다.
- 위 처럼 두개의 Unicode Scalar를 조합하게 되면 서로 다른 Unicode Scalar이지만 하나의 문자로 표현될 수 있습니다.
- 하나의 문자이기 때문에 두 문자열을 이루고 있는 문자의 갯수는 같습니다.
이렇게 Swift에서 String
은 Unicode Scalar로 이렇게 각기 다른 Unicode Scalar는 서로 다른 메모리 크기를 필요로 하기 때문에 특정 문자가 어떤 위치에 있는지 알기 위해서는 문자열의 처음부터 끝까지 Unicode Scalar를 체크해야합니다. 그렇기 때문에 Swift에서는 정수 값으로 인덱스에 접근이 불가능합니다. 그렇기 때문에 String.Index
라는 타입이 존재합니다.
마무리
오늘은 이렇게 간단히 왜 Swift에서 String
은 정수 값의 인덱스로 접근할 수 없는지에 대해 알아보았습니다. 다음 시간에는 보다 유익한 내용으로 찾아뵙도록 하겠습니다. 감사합니다.
참고자료