๊ด€๋ฆฌ ๋ฉ”๋‰ด

IT’s Portfolio

[Rust] String Type (String, str) ๋ณธ๋ฌธ

Development Study/Rust

[Rust] String Type (String, str)

f1r3_r41n 2023. 1. 5. 18:07
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ป Rust String

  • Rust์˜ String์€ ์ปฌ๋ ‰์…˜์— ํฌํ•จ๋จ
    • String์€ ๋ฐ”์ดํŠธ์˜ ์ปฌ๋ ‰์…˜ ๋ฐ ์ด ๋ฐ”์ดํŠธ๋“ค์„ ํ…์ŠคํŠธ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ
  • Rust์˜ String ํƒ€์ž…
    • String
    • str

๐Ÿค” String ๊ฐœ๋…

  • std lib ์— ์˜ํ•ด ์ œ๊ณต๋˜๋Š” String ํƒ€์ž…
  • String ์€ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ 8๋น„ํŠธ ๋ถ€ํ˜ธ ์—†๋Š” ๋ฐฐ์—ด์ธ Vec<char> ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐ์ฒด
  • growable, mutable, ownable, Encode with UTF-8, Not null terminated
  • String ์€ str ๊ณผ ๋‹ฌ๋ฆฌ ๋ฐ์ดํ„ฐ ์†Œ์œ ๊ถŒ ๋ณด์œ 
    • ๋•Œ๋ฌธ์— String ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ๋•Œ & ๋˜๋Š” ์ฐจ์šฉ ์ƒํƒœ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด์ง€ ์•Š์Œ
  • ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋™์•ˆ String ์˜ ํฌ๊ธฐ๋Š” ์ปดํŒŒ์ผ ํƒ€์ž„์— ์•Œ๋ ค์ง€๊ฑฐ๋‚˜ ์•Œ๋ ค์ง€์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธธ์ด๊ฐ€ ํ•œ๊ณ„์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ํ™•์žฅ ๊ฐ€๋Šฅ

๐Ÿค” str ๊ฐœ๋…

  • str ์€ ๋Ÿฌ์ŠคํŠธ ํ•ต์‹ฌ ์–ธ์–ด ๊ธฐ๋Šฅ ๋‚ด์— ์กด์žฌํ•˜๋Š” ์œ ์ผํ•œ String ํƒ€์ž…: &[char] ์Šฌ๋ผ์ด์Šค
    • ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์„ ์ •์˜ํ•˜๋Š” ๊ธฐ๋ณธ ์œ ํ˜•
    • &str ์€ ์ฐธ์กฐ์ž ํ˜•ํƒœ
      • ๋‹ค๋ฅธ ์–ด๋”˜๊ฐ€์— ์ €์žฅ๋œ UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋œ ์ŠคํŠธ๋ง ๋ฐ์ดํ„ฐ์˜ ์ฐธ์กฐ์ž
      • ํ”„๋กœ๊ทธ๋žจ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์œ„์น˜ํ•˜๋Š” ์ŠคํŠธ๋ง ๋ฆฌํ„ฐ๋Ÿด๋„ ์ŠคํŠธ๋ง ์Šฌ๋ผ์ด์Šค๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Œ

๐Ÿ’€ String slice

  • ํ•ญ๋ชฉ ์‹œํ€€์Šค๋ฅผ ํฌํ•จํ•˜๊ณ  ๊ตฌ๋ฌธ์œผ๋กœ ํ‘œ์‹œ๋˜๋Š” ๋ณด๊ธฐ
  • ์†Œ์œ ๊ถŒ์ด ์—†์ง€๋งŒ ํ•ญ๋ชฉ์ด ๋‚˜ํƒ€๋‚˜๋Š” ์ˆœ์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅ
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ŠคํŠธ๋ง ์Šฌ๋ผ์ด์Šค๋Š” ๋ฌธ์ž์—ด ์š”์†Œ ์‹œํ€€์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ
  • ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด์ธ String ์—๋Š” ๊ฐ ๋ฌธ์ž์— ๋Œ€ํ•œ ์œ„์น˜ ๋˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ

๐Ÿ’€ String literal

  • ํ…์ŠคํŠธ๋ฅผ ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์–ด ๊ตฌ์„ฑ
    • ์ฝ๊ธฐ ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ์— ์‹คํ–‰ ํŒŒ์ผ์˜ ์ผ๋ถ€๋กœ ์ €์žฅ๋œ "์‚ฌ์ „ ํ• ๋‹น๋œ ํ…์ŠคํŠธ" ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฌธ์ž์—ด ์กฐ๊ฐ
      • ์ฆ‰, RAM์€ ์†Œํ”„ํŠธ์›จ์–ด์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋ฉฐ ์Šคํƒ ์บ์‹œ์— ์˜์กดํ•˜์ง€ ์•Š์Œ

๐Ÿค” String ๊ณผ str ์ฐจ์ด์ 

String str
mutable immutable
์ปดํŒŒ์ผ ์‹œ ํฌ๊ธฐ ์•Œ ์ˆ˜ ์—†์Œ ์ปดํŒŒ์ผ ์‹œ ํฌ๊ธฐ ์•Œ ์ˆ˜ ์žˆ์Œ
๋ฐ์ดํ„ฐ ํž™์— ์ €์žฅ ๋ฐ์ดํ„ฐ ํ”„๋กœ๊ทธ๋žจ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ์ €์žฅ
๋ณ€์ˆ˜ ๊ฐ’ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•  ํ•„์š” ์—†์Œ ๋‹จ์ผ ๋ณ€์ˆ˜ ํ• ๋‹น ์‹œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐ

๐Ÿค” Code

// ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜
fn print_type_of<T>(_: &T) {
    println!("{}", std::any::type_name::<T>())
}

fn main() {
    let test_string = String::from("test!!!");
    print_type_of(&test_string); // alloc::string::String
    println!("{}", test_string); // test!!!

    let test_str = "test!!!";
    print_type_of(&test_str); // &str
    println!("{}", test_str); // test!!!

    // ๋ฌธ์ž์—ด ์Šฌ๋ผ์ด์‹ฑ
    let test_slice = &test_string[1..4];
    print_type_of(&test_slice); // &str
    println!("{}", test_slice); // est
}
728x90
๋ฐ˜์‘ํ˜•
Comments