[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 을 모두 받을 수 있다는 걸 의미한다.


정말 애플 너 메모리 관리에 진심이구나...


참고문서
서브스크립트 공식 문서
랭귀지 가이드의 서브스크립트

좋은 웹페이지 즐겨찾기