티스토리 뷰

[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 은 정수 값의 인덱스로 접근할 수 없는지에 대해 알아보았습니다. 다음 시간에는 보다 유익한 내용으로 찾아뵙도록 하겠습니다. 감사합니다.


참고자료


  1. Strings and Characters
  2. Swift String Cheat Sheet


'Swift + iOS > Swift' 카테고리의 다른 글

[Swift] Hashable  (0) 2018.06.03
[Swift] 접근제어 Access Control  (0) 2018.01.21
[Swift] String 좀 더 알아보기 (1)  (0) 2018.01.01
[Swift] if-let을 사용할 때 유의해야할 점  (1) 2017.12.17
[Swift] lazy Variables  (1) 2017.11.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함