Rust &str 대신 String을 넘기면 쓸 수 없는 이유가 생긴다
페이지 정보

영삼이
본문
✅ &str
대신 String
을 넘기면 쓸 수 없는 이유가 생긴다
함수에 소유권 넘기면 재사용 불가능해진다
Rust 초보는 보통 함수 인자로 String
을 넘긴다:
fn greet(name: String) {
println!("Hello, {}", name);
}
그런데 이게 문제를 만든다:
fn main() {
let name = String::from("영삼");
greet(name);
greet(name); // ❌ error: value used here after move
}
-
String
은 **소유권이 이동(move)**되기 때문에 -
한 번 넘기고 나면 그 변수는 다시 못 쓴다
✅ 해결 방법: 참조(&str
)로 받자
fn greet(name: &str) {
println!("Hello, {}", name);
}
fn main() {
let name = String::from("영삼");
greet(&name); // ✅ OK
greet(&name); // ✅ OK
}
-
&String
은 자동으로&str
로 변환됨 -
소유권을 넘기지 않으니 재사용 가능
-
메모리 복사 없이 효율적
???? 언제 String
을 쓰고 언제 &str
을 써야 할까?
상황 | 권장 타입 |
---|---|
외부에서 문자열 받는 함수 | &str |
함수 안에서 소유해야 할 때 | String |
리턴 값으로 문자열 만들 때 | String |
읽기 전용 파라미터 처리 시 | &str |
✔️ 요약
-
함수 인자는 가급적 참조로 받자 (
&str
) -
소유권이 필요한 경우에만
String
을 사용하자 -
재사용, 성능, 안정성 모두 챙길 수 있다
- 이전글Option은 if문보다 .map()이나 .unwrap_or()가 더 깔끔하다 25.03.28
댓글목록
등록된 댓글이 없습니다.