-
Swift - SubStringProgramming/Swift 2020. 10. 22. 22:35
오늘은 SubString에 대해서 공부해보겠습니다 :)
SubString
속성과 메서드를 이용하여 String에 첫 글자를 가져와 보겠습니다.
first 속성과 prefix 메서드는 둘 다 str의 첫 글자인 B를 나타냅니다.
하지만 차이점은 first 속성은 Optional Charater Type을 리턴해주고 prefix 메서드는 SubString Type을 리턴해줍니다.
두 Type은 이름이 다르듯 서로 다른 Type입니다.
그럼 둘의 차이는 무엇일까요??
Character는 우리가 지난 포스팅에서 공부했으니 넘어갈게요!
SubString에 대해서 공식문서를 확인해 보겠습니다.
A slice of a string.
String의 조각이라고 하네요. 이것만으로는 뭔지 감이 잘 안옵니다. 설명을 더 보도록 할게요.
Operating on substrings is fast and efficient because a substring shares its storage with the original string.
원본 string의 저장공간을 공유한다고 나와있습니다.
이게 핵심입니다.
SubString은 새로운 메모리 공간을 가지지 않습니다.
원래 있던 String의 메모리 공간을 공유합니다.
새로운 메모리 공간을 만들지않으니 처리속도가 빨라지게 됩니다.
그렇다면 이러한 의문이 들수 있습니다.
만약 SubString을 바꾸게 되면 어떻게 되는 거지???
메모리 공간을 공유한다면 SubString을 바꾸게 되면 원본 String도 바뀌게 되는 게 아닐까??
자! 한번 해보도록 할게요!
변수 mutatingSubStr를 선언하고 "Bee"를 "Honey"로 변경했습니다.
결과는 원본은 바뀌지 않고 mutatingSubStr만 변한 것을 확인할 수 있습니다.
메모리 공간을 따로 가지지 않는데 어떻게 된 것일까요?
Copy-on-Write Optimization (COW)
Swift의 메모리 관리 방식에는 copy-on-write optimization이라는 기능이 있습니다.
SubString은 읽기, 즉 접근을 할 때는 메모리 공간을 새로 만들지 않고 원본과 공유합니다.
하지만 쓰기, 즉 값을 변경하면 메모리 공간을 새로 만들고 따로 저장하게 됩니다.
그래서 SubString의 값을 변경해도 원본에는 영향을 주지 않습니다.
참고자료
https://docs.swift.org/swift-book/LanguageGuide/StringsAndCharacters.html
728x90'Programming > Swift' 카테고리의 다른 글
Swift - String Method, Property (Update) (0) 2021.07.26 Swift - String Method, Property (Create, Read) (1) 2020.10.27 Swift - String Index (0) 2020.10.21 Swift - Raw String (0) 2020.10.20 Swift - String Format Specifier (0) 2020.10.16