Rust Professional Code
Rust-Professional-Code ์ฑ ์ ๋ํ ๋ด์ฉ์ ๋ฆฌ, ๊ฐ๋จํ๊ณ ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฆฌํ์ฌ ๊ฐ์ธ ์ฐธ๊ณ ์ฉ
- ์ง๊ธ ๋์๊ฒ๋ ์ค์ํ ๋ด์ฉ๋ค๋ ๋ง์ง๋ง, ๋น์ฅ ๋์๊ฒ ํ์ํ์ง๋ ์์ ํฐ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ, ๋ค๋ฅธ ์ธ์ด ๋ฐ์ด๋๋ฆฌ์์ ํตํฉ๊ณผ ๊ฐ์ ๊ฒ๋ค์ด ๋ง๋ค.
- ์ธ์ ๊ฐ๋ ํ์ํด์ง๊ฒ ์ง๋ง ๊ทธ๋ฌํ ๋ด์ฉ๋ค์ ๊ทธ ์ฆ์์ ์ฝ์ด๊ฐ๋๊ฒ ๋ซ๋ค๋ ์๊ฐ์ด ๋ค์ด ํ์ํ ๋ถ๋ถ๋ง ๋ฆฌ๋ง์ธ๋์ฉ์ผ๋ก ๋ฐ์ทํด์ ์ ๋ฆฌํ๋ ค ํ๋ค.
Chapter 4 ๋ฐ์ดํฐ ๊ตฌ์กฐ
String, str, &str, &โsatic str์ ๋ํ ์ค๋ช
๋ฌธ์์ด ํ์ ๋ค์ด ๋ง์ ํผ๋์ค๋ฝ์ง๋ง, ๊ธฐ๋ณธ๋ฐ์ดํฐ(์ฐ์์ ์ธ ๋ฌธ์์ ์ด)์ ์ํธ์์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ๋๋ ์ ์๊ฐํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋ฌ์คํธ์๋ ํ ์ข ๋ฅ์ ๋ฌธ์์ด๋ง ์์ง๋ง, ๋ฌธ์์ด์ ํ ๋นํ๊ณ ํด๋น ๋ฌธ์์ด์ ์ฐธ์กฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
String๊ณผ str
- ์ด ๋์ ๊ธฐ์ ์ ์ผ๋ก๋ ๋ค๋ฅธ ํ์ ์ด์ง๋ง, ์๋์ ๋ชฉ์ ๋ฉด์์๋ ๋๋์์ดํ๋ค.
- ์ ์ผํ ์ค์ง์ ์ธ ์ฐจ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐฉ๋ฒ์ด๋ค.
- str : โ์คํโ์ ํ ๋น๋ utf-8 ๋ฌธ์์ด, ๋์ฌํ ์ ์์ง๋ง ์ด๋ํ๊ฑฐ๋ ๋ณ๊ฒฝ ํ ์ ์์
- String: โํโ์ ํ ๋น๋ utf-8 ๋ฌธ์์ด, ๋์ฌ์ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํจ
char *stack_string = "stack-allocated string";
char *heap_string = strndup("heap-allocated string);
- ๋น์ ํ์๋ฉด str์ ์ ์, String์ ํ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ฌ์คํธ์์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ช ์์ ์ด๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก ํ์ ์์ฒด๊ฐ ์์์ ์์ ํจ๊ป ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐฉ๋ฒ๋ ์ ์ํ๋ค.
ํจ์จ์ ์ผ๋ก ๋ฌธ์์ด ์ฌ์ฉํ๊ธฐ
- ๋ฌ์คํธ์์ ์์ ํ ๋ ๋๋ถ๋ถ String, &str์ ์ฌ์ฉํ๊ณ str์ ์ฌ์ฉํ์ง ์๋๋ค.
- ๋ฌ์คํธ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์
- ๋ถ๋ณ ๋ฌธ์์ด ํจ์๋ &str ํ์ ์ ๋ํด ๊ตฌํ๋๋ค.
- ๊ฐ๋ณ ๋ฌธ์์ด ํจ์๋ String ํ์ ์์๋ง ๊ตฌํ๋๋ค.
- str์ ์ง์ ์์ฑํ ์๋ ์์ผ๋ฉฐ, ๊ทธ์ ๋ํ ์ฐธ์กฐ๋ง ๋น๋ฆด ์ ์๋ค.
- ํจ์ ํ๋ผ๋ฏธํฐ๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ์ฒ๋ผ String์ ํญ์ &str๋ก ๋น๋ฆด ์ ์๊ธฐ ๋๋ฌธ์ &str ํ์ ์ ์ต์ ๊ณตํต ๋ถ๋ชจ ์ญํ ์ ํ๋ค.
- static์ ๊ฒฝ์ฐ๋ ํ๋ก์ธ์ค์ ์ ์ฒด ์๋ช ๋์ ์ ํจํ ์ฐธ์กฐ๋ฅผ ์ ์ํ๋ ํน์ํ ์๋ช ์ง์ ์์ด๋ค.
- ์ฐธ๊ณ ๋ก &str๋ก
&'static str์ ๋น๋ฆด ์ ์๋ค.
| ํน์ฑ | str |
&str |
String |
&'static str |
|---|---|---|---|---|
| ์ข ๋ฅ | ์ฌ๋ผ์ด์ค | ๋ฌธ์์ด ์ฌ๋ผ์ด์ค ์ฐธ์กฐ | ์์ ๊ถ์ด ์๋ ๋ฌธ์์ด | ์ ์ ์๋ช ์ ๊ฐ์ง ๋ฌธ์์ด ์ฌ๋ผ์ด์ค |
| ํฌ๊ธฐ | ๋์ | 2*ํฌ์ธํฐ ํฌ๊ธฐ (16๋ฐ์ดํธ) | 24๋ฐ์ดํธ (ํฌ์ธํฐ, ๊ธธ์ด, ์ฉ๋) | 2*ํฌ์ธํฐ ํฌ๊ธฐ (16๋ฐ์ดํธ) |
| ์๋ช | N/A (๋จ๋ ์ฌ์ฉ ๋ถ๊ฐ) | ์ฐธ์กฐ ์๋ช ์ ์ข ์ | ์์ ๊ถ ๊ธฐ๋ฐ, ๋ช ์์ ์๋ช ์์ | ํ๋ก๊ทธ๋จ ์ ์ฒด ์๋ช |
| ์์ ๊ฐ๋ฅ์ฑ | ๋ถ๋ณ | ๋ถ๋ณ | ๊ฐ๋ณ | ๋ถ๋ณ |
| ํ ๋น | ์คํ (์ผ๋ฐ์ ์ผ๋ก) | ์์ (์ฐธ์กฐ๋ง) | ํ | ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ |
| ์์ฑ ๋ฐฉ๋ฒ | ์ง์ ์์ฑ ๋ถ๊ฐ | &"hello", ์ฌ๋ผ์ด์ฑ |
String::from("hello"), "hello".to_string() |
"hello", const S: &'static str = "hello" |
| ์ฃผ์ ์ฉ๋ | ํ์ ์ ์์ฉ | ๋ฌธ์์ด ์ฐธ์กฐ ๋ฐ ์ฝ๊ธฐ | ๋ฌธ์์ด ์์ ๋ฐ ์์ | ์ปดํ์ผ ํ์ ์์ ๋ฌธ์์ด |
| ์์ | fn f(s: str) (๋ถ๊ฐ๋ฅ) |
fn f(s: &str) |
let s = String::from("hello") |
const VERSION: &'static str = "1.0" |
| ๋ณํ | N/A | &String โ &str ์๋ ๋ณํ |
.as_str() โ &str |
&'static str โ &str ๊ฐ๋ฅ |
| ์ฐ๊ฒฐ | ๋ถ๊ฐ๋ฅ | ๋ถ๊ฐ๋ฅ (์ String ํ์) | + ์ฐ์ฐ์, push_str() |
๋ถ๊ฐ๋ฅ (์ String ํ์) |
| ๋ฌธ์์ด ๋ฆฌํฐ๋ด | N/A | ๋ฆฌํฐ๋ด์ &'static str |
to_string() ์ผ๋ก ๋ณํ ํ์ |
๋ฌธ์์ด ๋ฆฌํฐ๋ด ์์ฒด |
- str๊ณผ String์ ๋ ๋ค๋ฅธ ์ฐจ์ด์ ์ String์ ์ด๋ํ ์ ์์ง๋ง, str์ ์๋๋ค๋ ๊ฒ์ด๋ค.
fn print_String(s: String) {
println!("print_String: {}", s);
}
fn print_str(s: &str) {
println!("print_String: {}", s);
}
fn main() {
// let s: str = "impossible str"; <- ์ปดํ์ผ ์๋จ
print_String(String::from("String")); // ๊ฐ๋ฅ, value๋ ์ด๋ํ๋ค.
print_str(&String::from("String")); // ์ฐธ์กฐ๋ฅผ ๋ฐํํ๊ธฐ์ ๊ฐ๋ฅ
print_str("str"); // main ์คํ์ str ์์ฑํ๊ณ , ์ด๋ฅผ ์ฐธ์กฐ๋ก ์ ๋ฌํ๊ธฐ์ ๊ฐ๋ฅํ๋ค
}