Rust 입문 중인데 문자열 타입이 두 개라 계속 헷갈려요. String이랑 &str이 있는데 겉보기엔 둘 다 그냥 문자열 같거든요. 왜 굳이 나눠놨는지 모르겠어요.
함수 만들다가 이런 데서 막혔어요.
fn greet(name: &str) {
println!("안녕 {}", name);
}
let s = String::from("철수");
greet(&s); // 이건 되고
greet("영희"); // 이것도 되고
신기하게 String을 넘길 때도 되고 그냥 큰따옴표 리터럴을 넘겨도 되던데, 반대로 함수 인자를 String으로 받게 하면 리터럴은 안 받아지더라고요. 그래서 인자는 웬만하면 &str로 받는 게 낫다는 글도 봤는데 왜 그런지 이유를 모르겠어요.
둘의 근본적인 차이가 뭔가요? 하나는 소유하고 하나는 빌리는 거라는 설명을 봤는데 감이 잘 안 와요. 언제 String을 쓰고 언제 &str을 써야 하는지 기준을 좀 잡아주시면 좋겠습니다.