본문 바로가기

Rust

[Rust] string과 str의 차이점은?

반응형

Rust에는 문자열 타입이 두가지 존재합니다. 언어 자체에서 지원하는 str과 표준 라이브러리에서 지원하는 String입니다

 

let s1: &str = "Hello,this is str";
let s2: String = String::from("Hello, this is String");

 

str은 보통 &str로 많이 사용합니다. String과 &str의 가장 큰 차이점은 String은 문자열 수정이 가능하지만 &str은 read-only입니. &str은 보통 문자열 리터럴이나 문자열 슬라이스를 저장하는데 사용됩니다.

 

String은 동적 heap 문자열의 Vec으로 구현이 되어있습니다. 그래서 문자열 데이터를 확장시키거나, 수정할 때 사용합니다. str은 변경이 어렵습니다.

 

c++과 비교해서 String은 std::string과 유사하고, &str는 char*와 유사한 점이 있습니다

보면, 둘다 각각 그 쓰임새가 존재합니다. String은 버퍼를 유지하고 사용하는데 유리합니다. &str 의 경우는 가볍고, 문자열을 단지 보는데 유용합니다. 메모리를 따로 할당하지 않고도, 청크를 검색, 분할, 구문분석 및 교체 할수 있습니다.

 

또, String과 &str은 서로간에 변환이 가능합니다

 

let s1 = "Hello".to_string();
using_string(&s1);
// ...

fn using_string(s: &str) {
  // ...
}

 

아래는 str을 string으로 변환 하는 예제입니다. 

let a:String = "hello rust".into() // 이 코드는 리터럴 문자열을 String의 메모리로 복사합니다. 

또 아래 코드를 사용하는 경우 리터럴 자체를 복사하지 않고 사용할 수 있다. (읽기전용)

let a: &str = "hello rust"; 

 

이상으로 String과 str를 정리 해보았습니다. 

반응형

'Rust' 카테고리의 다른 글

[RUST] xlsxwriter  (0) 2023.07.24
[Rust] 제어문 If-else, while, do-while  (0) 2022.10.18
[Rust] 벡터 (Vector)  (0) 2022.10.03
[Rust] 타입 추론 (Type Inference)  (0) 2022.09.16
Rust, If 문 및 loop문, control flow (제어문)  (0) 2020.01.27