피드로 돌아가기![[Rust Guide] 8.4. String Type Pt.2 - Bytes, Scalar Values, Grapheme Clusters, and String Operations](/_next/image?url=https%3A%2F%2Ftsewlmecqtvqphyhezcm.supabase.co%2Fstorage%2Fv1%2Fobject%2Fpublic%2Fthumbnails%2Fbdae9b7c-c4fc-4ac4-b630-eb7268ef6da0.webp%3F&w=3840&q=75)
Dev.toBackend
원문 읽기
UTF-8 가변 길이 인코딩 대응을 위한 Rust String Indexing 금지 설계
[Rust Guide] 8.4. String Type Pt.2 - Bytes, Scalar Values, Grapheme Clusters, and String Operations
AI 요약
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 지원 라이브러리 도입을 검토할 것