피드로 돌아가기
[Rust Guide] 8.4. String Type Pt.2 - Bytes, Scalar Values, Grapheme Clusters, and String Operations
Dev.toDev.to
Backend

UTF-8 가변 길이 인코딩 대응을 위한 Rust String Indexing 금지 설계

[Rust Guide] 8.4. String Type Pt.2 - Bytes, Scalar Values, Grapheme Clusters, and String Operations

SomeB1oody2026년 4월 11일7intermediate

Context

문자열 내부 데이터가 단순 바이트 배열이 아닌 UTF-8 기반 가변 길이 인코딩으로 저장되는 구조적 특성 분석. 정수 기반 Indexing 허용 시 유효하지 않은 Unicode Scalar Value 참조로 인한 런타임 버그 발생 가능성 상존.

Technical Solution

  • String 타입을 Vec의 Wrapper로 설계하여 Heap 메모리 기반의 동적 크기 조절 구현
  • O(1) 시간 복잡도를 보장할 수 없는 가변 길이 특성을 반영하여 정수 Indexing Trait 구현을 의도적으로 배제
  • .chars() 메서드를 통한 Unicode Scalar Value 단위의 반복자 제공으로 데이터 무결성 확보
  • .bytes() 메서드를 통해 인코딩된 원시 바이트 데이터에 직접 접근하는 인터페이스 분리
  • Slicing 시 Char Boundary 검증 로직을 강제하여 유효하지 않은 바이트 범위 지정 시 Panic 발생 유도
  • Grapheme Clusters 처럼 복잡한 연산은 Standard Library 범위를 벗어나 Third-party Crate로 위임하는 설계 선택

1. UTF-8 문자열 처리 시 .len()이 문자의 개수가 아닌 바이트 길이를 반환함을 인지할 것

2. 문자 단위 순회가 필요할 경우 Indexing 대신 .chars() Iterator를 사용할 것

3. String Slicing 적용 전 해당 인덱스가 Char Boundary에 위치하는지 반드시 검증할 것

4. 사용자 시각의 '글자' 단위 처리가 필요하다면 Grapheme Cluster 지원 라이브러리 도입을 검토할 것

원문 읽기