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 ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ์ฐธ์กฐ๋กœ ์ „๋‹ฌํ•˜๊ธฐ์— ๊ฐ€๋Šฅํ•˜๋‹ค
}

์Šฌ๋ผ์ด์Šค์™€ ๋ฐฐ์—ด ์ดํ•ดํ•˜๊ธฐ