[swift] Substring는 왜 있는 걸까?
🗒 Substring 이란?
String 타입을 가지고 메서드로 변형을 하게 되면 이상하게 return 타입이 String 이 아니고 Substring 이다.
애플 공식문서가 말하길
Substring 타입은 String 타입과 거의 동일한 메서드를 가지고 있기 때문에 String처럼 사용할 수 있는 타입이라고 한다.
@frozen struct Substring
🧐 Substring이 존재하는 이유
위의 말에 따르면 String이나 Substring이나 별 다를게 없다는 건데
그럼 왜? Substring 타입을 따로 만들었을까? (귀찮게...)
바로 성능 최적화 때문이라고 한다.
Substring 타입은 String을 변환했을 때 생긴다.
그래서 저장 공간을 아끼기 위해서 변환하기 전의 String 타입의 주소를 참조해서 값을 가지고 있다.

위의 이미지를 보면 이해가 빠를 것이다.
값을 참조해서 가지고 있다가 String 으로 타입을 변환하는 순간 저장공간에 저장하기 시작한다.
StringProtocol
String 과 Substring 은 모두 StringProtocol 을 준수하고 있다.
이말은 즉,
문자열을 조작하는 메서드를 생성할 때 StringProtocol 타입을 파라미터로 받는다고 한다면,
String 과 Substring 을 모두 받을 수 있다는 걸 의미한다.
정말 애플 너 메모리 관리에 진심이구나...
참고문서
서브스크립트 공식 문서
랭귀지 가이드의 서브스크립트
Author And Source
이 문제에 관하여([swift] Substring는 왜 있는 걸까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@cherrish_red/swift-Substring는-왜-있는-걸까저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)