문자열 관련
소유권 / 참조 타입 | 가변성 / 불변성 | 사용 예시 | |
String | - String 은 힙에 할당된 가변적인 문자열을 나타내며, 소유권을 가집니다.
- String 타입은 데이터를 소유하고, 힙 메모리를 관리합니다.
- 소유권이 있기 때문에, String은 다른 함수로 이동할 수 있으며, 이동된 후에는 원래 변수를 사용할 수 없습니다. | - String은 가변(mutable)하며, 문자열을 변경(추가, 삭제 등)할 수 있습니다.
- String을 통해 문자열을 동적으로 생성하고 수정할 수 있습니다. | let mut s = String::from("Hello");
s.push_str(", world!"); // 문자열에 추가 가능
println!("{}", s); // "Hello, world!"
|
&str | - &str은 문자열 슬라이스(string slice)로, 이미 존재하는 문자열 데이터에 대한 불변(immutable) 참조입니다.
- &str은 힙이 아닌 스택에 저장되며, 문자열 데이터의 시작 위치와 길이를 나타냅니다.
- &str은 소유권을 가지지 않기 때문에, 데이터의 소유권을 가진 다른 String 또는 문자열 리터럴의 데이터를 가리킵니다. | - &str은 불변(immutable)하며, 데이터를 변경할 수 없습니다.
- 이는 문자열 리터럴과 동일하게 동작합니다. | fn greet(name: &str) {
println!("Hello, {}!", name);
}
let name = "Alice";
greet(name); // "Hello, Alice!"
let s = String::from("Bob");
greet(&s); // "Hello, Bob!" (String에서 &str 참조로 변환) |