Rust 의 텍스트는 두 타입으로 갈려 있고, 그 분리가 처음엔 다들 헷갈려: String 과 &str. 구분은 정확히 네가 이미 아는 소유 vs 빌림 분리야.
String 은 소유; &str 은 빌림
String 은 자라는 힙 할당 소유 UTF-8 버퍼야 — append 할 수 있고, drop 될 때 메모리를 해제해. &str ('문자열 슬라이스') 는 다른 누군가가 소유하는 UTF-8 텍스트로의 빌린 view 야 — owner 가 아니라 창문. 문자열 리터럴 "hi" 는 네 바이너리를 가리키는 &str 이야.
어디에 뭘 쓰나
함수 파라미터엔 &str 을 받아 — 리터럴이랑 빌린 String 둘 다 받거든. 소유권 필요하면 String 을 반환/저장해. String 은 String::from, .to_string(), format! 로 짓고; push_str 로 append 해. &String 에서 &str 로 coercion 이 자동이라, &str 파라미터가 둘 다와 '그냥 돼'.
UTF-8 은 정수 인덱싱이 없다는 뜻이야. String 에
s[0] 을 못 써 — 글자가 여러 바이트일 수 있어서 바이트로 인덱싱하면 하나를 쪼갤 수 있거든. 글자엔 .chars(), raw 바이트엔 .bytes() 로 순회하고, 알려진 char 경계에서만 슬라이스해. Rust 는 Unicode 를 존중하게 만들어.왜 타입 둘이 사실 더 단순하냐
체화하기 전엔 오버헤드 같아: 타입이 누가 텍스트를 소유하는지 말해줘. struct 의 String = struct 가 자기 텍스트를 소유하고 lifetime 걱정 없음. &str = 출처에 묶인 빌림. 소유 vs 빌림이 click 하면 (Borrowing 트랙에서 됐지), 두 문자열 타입이 헷갈림을 멈추고 정보가 되기 시작해.