문자열은 “무엇을 가졌나”와 “무엇을 셀까”를 나눠 본다

String&str은 소유 관계를, bytes·chars·grapheme은 같은 UTF-8 텍스트를 해석하는 단위를 설명한다.

저장과 소유

String

소유한 UTF-8 버퍼

힙의 바이트를 소유하며 늘리거나 바꿀 수 있다.

&str

빌린 UTF-8 슬라이스

다른 곳의 문자열 데이터를 소유권 이동 없이 바라본다.

해석 단위

bytes()

저장 바이트

UTF-8 인코딩의 실제 저장 단위를 순회한다.

chars()

유니코드 스칼라

Rust의 char 단위이며 화면의 글자 수와 다를 수 있다.

grapheme

사용자가 보는 글자

여러 스칼라가 한 글자로 보일 수 있어 별도 처리가 필요하다.

판단 순서 소유가 필요한지 먼저 정하고, 그다음 연산의 단위를 고른다. 숫자 인덱싱은 이 단위가 모호하므로 허용되지 않으며, 슬라이스는 유효한 UTF-8 경계에서만 만든다.