String๊ณผ str
์ด์ ๋ฌ์คํธ์ ๋ ๊ฐ์ง ๋ฌธ์์ด ํ์ ์ ๋ํด์ ์ดํดํด ๋ณด๊ฒ ์ต๋๋ค:
fn main() { let s1: &str = "World"; println!("s1: {s1}"); let mut s2: String = String::from("Hello "); println!("s2: {s2}"); s2.push_str(s1); println!("s2: {s2}"); let s3: &str = &s2[6..]; println!("s3: {s3}"); }
๋ฌ์คํธ ์ฉ์ด:
&str์ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์ ๋ํ (๋ถ๋ณ) ์ฐธ์กฐ์ ๋๋ค.String์ ๋ฌธ์์ด์ ๋ด์ ์ ์๋ ๋ฒํผ์ ๋๋ค.
-
&str์ ๋ฌธ์์ด ์ฌ๋ผ์ด์ค์ ๋๋ค. ๋ฌธ์์ด ์ฌ๋ผ์ด์ค๋ UTF-8๋ก ์ธ์ฝ๋ฉ๋ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ๋ฌธ์์ด ๋ฆฌํฐ๋ด("Hello")์ ํ๋ก๊ทธ๋จ ๋ฐ์ด๋๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค. -
๋ฌ์คํธ์
Stringํ์ ์ ์ค์ ๋ก๋ ๋ฌธ์์ด์ ์ด๋ฃจ๋ ๋ฐ์ดํธ์ ๋ํ ๋ฐฑํฐ(Vec<u8>)์ ๋๋ค.Vec<T>๊ฐT๋ฅผ ์์ ํ๊ณ ์๋ฏ์ด,String์ด ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฌธ์์ด์String์ ์์ ์ ๋๋ค. -
๋ค๋ฅธ ๋ง์ ํ์ ๋ค์ฒ๋ผ
String::from๋ ๋ฌธ์์ด ๋ฆฌํฐ๋ด๋ก๋ถํฐ ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค.String::new()๋ ์๋ก์ด ๋น ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค.push()์push_str()๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. -
format!()๋งคํฌ๋ก๋ ๋ณ์์ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด ๋งคํฌ๋ก๋println!()๋งคํฌ๋ก์ ๋์ผํ ํฌ๋งทํ ํ์์ ์ง์ํฉ๋๋ค. -
&์ ๋ฒ์ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌString์์&str์ฌ๋ผ์ด์ค๋ฅผ ๋น๋ ค์ฌ ์ ์์ต๋๋ค. -
๋น์ ์ด C++ ํ๋ก๊ทธ๋๋จธ ๋ผ๋ฉด:
&str๋ C++์const char*์ ์ ์ฌํ์ง๋ง ํญ์ ์ ํจํ ๋ฌธ์์ด์ ๊ฐ๋ฆฌํจ๋ค๋ ์ ์ด ๋ค๋ฆ ๋๋ค. ๋ฌ์คํธ์String์ C++์std::string๊ณผ ๋๋ต ๊ฑฐ์ ๋์ผํฉ๋๋ค. (์ฃผ์ ์ฐจ์ด์ : ๋ฌ์คํธ์String์ UTF-8 ์ธ์ฝ๋ฉ ๋ฐ์ดํธ๋ง ํฌํจํ ์ ์์ผ๋ฉฐ ์์ ๋ฌธ์์ด ์ต์ ํ(small-string optimization)๋ ๊ตฌํํ์ง ์์ต๋๋ค.