기존 문자열에 prefix()
등과 같은 문자열 메서드를 사용하여 만들어진 반환 값은 문자열(String) 타입이 아닌 서브 스트링(Substring)으로 만들어집니다.
기존 문자열로부터 만들어진 서브 스트링은 새로운 메모리공간을 생성하여 할당하는 방식이 아닌, 기존 문자열의 메모리 공간에서 저장되는 방식입니다. (즉, 기존 문자열의 메모리 공유)
새로운 메모리 공간을 생성하는 것이 아닌, 기존 메모리 공간에 값을 할당하는 방식이기 때문에 메모리의 효율성이 증가한다는 장점을 가지고 있습니다. (최적화)
이러한 작업은 개발자가 직접적으로 구현하는 것이 아닌 Swift 내부에서 자동으로 처리해 주는 작업입니다. (자동으로 최적화)
✅ 서브 스트링(Substring)
변수 x와 y는 변수 str의 메모리 공간에 저장됩니다.
var str = "hello kim" var x = str.prefix(5) // hello var y = str.suffix(3) // kim // String.SubSequence 타입을 Substring 타입이라 부릅니다.
기존 문자열을 수정하게 되면 서브 스트링은 더 이상 메모리 공간을 공유받을 수 없으므로, 자체적인 메모리 공간을 만듭니다.
기존 문자열을 수정하거나 공유받는 서브 스트링 문자열을 수정하면, 새로운 문자열 메모리 공간을 생성합니다.