개발 지식

개발 지식

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

페이지 정보

profile_image
영삼이
0건 114회 25-03-28 15:14

본문

&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을 사용하자

  • 재사용, 성능, 안정성 모두 챙길 수 있다


댓글목록

등록된 댓글이 없습니다.