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

IT’s Portfolio

[Rust] Start Rust (Day 5) - Common Programming Concepts [1] ๋ณธ๋ฌธ

Development Study/Rust

[Rust] Start Rust (Day 5) - Common Programming Concepts [1]

f1r3_r41n 2023. 1. 3. 15:17
728x90
๋ฐ˜์‘ํ˜•

๐Ÿฆ€ Rust Day 5

๐Ÿณ๏ธ Common Programming Concepts

  • keyword : ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์˜ˆ์•ฝ ํ‚ค์›Œ๋“œ ์กด์žฌ -> ๋‹ค๋ฅธ ์–ธ์–ด์™€ ๊ฐ™์Œ

1๏ธโƒฃ ๋ณ€์ˆ˜์™€ ๊ฐ€๋ณ€์„ฑ

  • ๋Ÿฌ์ŠคํŠธ๋Š” ๋ณ€์ˆ˜์˜ ๋ถˆ๋ณ€์„ฑ(immutability)์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋ฉฐ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํšŒํ”ผํ•  ์ˆ˜ ์žˆ์Œ
    • ๊ธฐ๋ณธ ๋ณ€์ˆ˜ ์„ ์–ธ๋ฌธ let x = 5; ์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ๋Š” ๋ถˆ๋ณ€์„ฑ ์ ์šฉ
    • ๋ณ€์ˆ˜ ์•ž์— mut keyword ์ถ”๊ฐ€ ์‹œ ๊ฐ€๋ณ€ ๋ณ€์ˆ˜ ์„ ์–ธ ๊ฐ€๋Šฅ
      • let mut x = 5;
    • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉ ์‹œ ๋ฐ์ดํ„ฐ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ณ€ํ˜•์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ
    • ์ž‘์€ ์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉ ์‹œ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์— ๊ฐ€๊น๊ฒŒ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌ

๐Ÿค” ๋ณ€์ˆ˜ vs ์ƒ์ˆ˜

  • ์ƒ์ˆ˜์—๋Š” mut keyword ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ

    • ์ƒ์ˆ˜๋Š” ํ•ญ์ƒ ๋ถˆ๋ณ€
  • let keyword ๋Œ€์‹  const keyword ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ

    • ํ• ๋‹นํ•  ๊ฐ’์˜ ํƒ€์ž…์„ ๋ฌด์กฐ๊ฑด ์ง€์ •ํ•˜์—ฌ์•ผ ํ•จ => annotation
  • ์ „์—ญ ๋ฒ”์œ„๋ฅผ ๋น„๋กฏํ•ด ์›ํ•˜๋Š” ์–ด๋–ค ๋ฒ”์œ„ ๋‚ด์—์„œ๋„ ์„ ์–ธ ๊ฐ€๋Šฅ

  • ๋ฐ˜๋“œ์‹œ ์ƒ์ˆ˜ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ํ• ๋‹น

    • ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ๊ฐ’์ด๋‚˜ ๊ธฐํƒ€ ๋Ÿฐํƒ€์ž„ ์—ฐ์‚ฐ์œผ๋กœ ์–ป์€ ๊ฐ’ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ
  • ๋Ÿฌ์ŠคํŠธ์—์„œ๋Š” ์ƒ์ˆ˜ ์ด๋ฆ„์— ๋Œ€๋ฌธ์ž ๋งŒ ์‚ฌ์šฉํ•˜๋ฉฐ snack case ๋ฅผ ๊ธฐ์šฉํ•œ๋‹ค๋Š” ๊ทœ์น™ ์‚ฌ์šฉ

    • ๋ฐ‘์ค„์€ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์ž๋ฆฟ์ˆ˜ ๊ตฌ๋ถ„ ์‹œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์ƒ์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ์„ ์–ธ๋œ ๋ฒ”์œ„ ๋‚ด์—์„œ ํ•ญ์ƒ ์œ ํšจํ•œ ๊ฐ’

  • ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํ•˜๋“œ์ฝ”๋“œ๋œ ๊ฐ’์— ์ƒ์ˆ˜๋กœ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ดœ์ฐฎ์€ ์„ ํƒ

      const MAX_NUM: u32 = 100_000;
    
      fn main() {
          println!("Max_num: {}", MAX_NUM);
      }
      // Result
      // Max_num: 100000

๐Ÿค” ๋ณ€์ˆ˜ ๊ฐ€๋ฆฌ๊ธฐ (shadowing)

  • ์ด๋ฏธ ์„ ์–ธํ•œ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๊ณผ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜ ์„ ์–ธ ๊ฐ€๋Šฅ

    • ์ด์ „์— ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋Š” ์ƒˆ๋กœ ์„ ์–ธํ•œ ๋ณ€์ˆ˜ ๋•Œ๋ฌธ์— ๊ฐ€๋ ค์ง
    • ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ฐธ์กฐํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์‚ฌ์šฉ๋จ
  • let keyword๋ฅผ ์ด์šฉํ•ด ์žฌ์„ ์–ธ ์‹œ shadowing

  • shadowing vs mut keyword

    • shadowing ์€ let keyword ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ๋œ ๊ฐ’๋„ ๋ถˆ๋ณ€

    • let keyword ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ, ํƒ€์ž…์€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

      • ex) ์‚ฌ์šฉ์ž์—๊ฒŒ ํŠน์ • ํ…์ŠคํŠธ ์‚ฌ์ด์— ์‚ฝ์ž…ํ•˜๊ณ  ์‹ถ์€ ๊ฐฏ์ˆ˜๋งŒํผ ๊ณต๋ฐฑ์„ ์ž…๋ ฅํ•˜๊ฒŒ ํ•œ ํ›„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

          fn main() {
              let spaces = "      ";
              let spaces = spaces.len();
        
              println!("๊ณต๋ฐฑ: {}", spaces);
          }
          // Result
          // ๊ณต๋ฐฑ: 6
          fn main() {
              let mut spaces = "      ";
              spaces = spaces.len();
        
              println!("๊ณต๋ฐฑ: {}", spaces);
          }
          // Result
          // error[E0308]: mismatched types

2๏ธโƒฃ ๋ฐ์ดํ„ฐ ํƒ€์ž…

  • ๋Ÿฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ๋‘ ๊ฐ€์ง€ ๋ถ€๋ถ„์ง‘ํ•ฉ
    • ์Šค์นผ๋ผ(Scalar)
    • ์ปดํŒŒ์šด๋“œ(Compound)
  • ๋Ÿฌ์ŠคํŠธ๋Š” ์ •์  ํƒ€์ž… ์–ธ์–ด
    • ์ฆ‰, ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ชจ๋“  ๋ณ€์ˆ˜์˜ ํƒ€์ž…์ด ๊ฒฐ์ •๋˜์–ด์•ผ ํ•จ
    • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํƒ€์ž… ์ถ”๋ก ์„ ํ†ตํ•ด ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’์ด๋‚˜ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ์„ ๋ณด๊ณ  ์‹ค์ œ ํƒ€์ž… ์˜ˆ์ธก
  • ์—ฌ๋Ÿฌ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๋•Œ๋Š” ํƒ€์ž… ์• ๋…ธํ…Œ์ด์…˜ (annotation) ์„ ์ด์šฉํ•ด ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ฃผ์–ด์•ผ ํ•จ

๐Ÿค” Scalar Type

  • ์ •์ˆ˜(integer)์™€ ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆซ์ž(floating point numbers), ๋ถˆ๋ฆฐ(booleans), ๋ฌธ์ž(characters) ๋“ฑ ๋„ค ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ Scalar Type ์ •์˜
    • โ˜๏ธ ์ •์ˆ˜ ํƒ€์ž…
      • ์†Œ์ˆ˜์ ์ด ์—†๋Š” ์ˆซ์ž
      • [์ •์ˆ˜ ํƒ€์ž…]
        ํฌ๊ธฐ ๋ถ€ํ˜ธ O ๋ถ€ํ˜ธ X
        8bit i8 u8
        16bit i16 u16
        32bit i32 u32
        64bit i64 u64
        arch isize usize
      • ๋ถ€ํ˜ธ๊ฐ€ ์žˆ๋Š” ํƒ€์ž…์€ ํ• ๋‹น๊ฐ’์ด ์Œ์ˆ˜๋‚˜ ์–‘์ˆ˜์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ถ€ํ˜ธ๊ฐ€ ํ•„์š”ํ•จ
      • ๋ถ€ํ˜ธ๊ฐ€ ์žˆ๋Š” ์ˆซ์ž๋Š” 2์˜ ๋ณด์ˆ˜๋กœ ํ‘œํ˜„
      • 2์˜ ๋ณด์ˆ˜ ์ •๋ฆฌ๊ธ€
      • ๋ถ€ํ˜ธ๊ฐ€ ์žˆ๋Š” ํƒ€์ž…๋“ค์€ $-(2^{n-1})$ ๊ณผ $2^{n-1}-1$ ์‚ฌ์ž‡๊ฐ’๋“ค์„ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ์Œ
        • n์€ ๊ฐ ํƒ€์ž…์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ํŠธ์˜ ๊ฐœ์ˆ˜
      • isize ๋‚˜ usize๋Š” ํ˜„์žฌ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰์ค‘์ธ ์ปดํ“จํ„ฐ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๊ทธ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง
      • [์ •์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด]
        ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด Ex
        Decimal 98_222
        Hex 0xff
        Octal 0o77
        Binary 0b1111_0000
        Byte(u8 ์ „์šฉ) b'A'
      • ๋ฐ”์ดํŠธ ์ œ์™ธ ๋ชจ๋“  ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด์—๋Š” 57u8๊ณผ ๊ฐ™์ด ํƒ€์ž… ์ ‘๋ฏธ์‚ฌ(suffix)๋ฅผ ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ
      • ๋ฐ‘์ค„๋กœ ์ž๋ฆฟ์ˆ˜ ํ‘œํ˜„ ๊ฐ€๋Šฅ
      • ์ •์ˆ˜์˜ ๊ธฐ๋ณธ ํƒ€์ž…: i32
        • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ๋น ๋ฅด๋ฉฐ 64bit ํ”Œ๋žซํผ์—์„œ๋„ ๋น ๋ฆ„
        • isize๋‚˜ usize ํƒ€์ž…์€ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์˜ ์ธ๋ฑ์Šค ์ฐธ์กฐ ์‹œ ์ฃผ๋กœ ์‚ฌ์šฉ
      • ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ
        • u8 ํƒ€์ž…์˜ ๋ณ€์ˆ˜์— 255๊ฐ€ ๋„˜๋Š” ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ คํ•˜๋ฉด ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒ (integer overflow)
        • ๋””๋ฒ„๊ทธ ๋ชจ๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋ฉด ๋Ÿฌ์ŠคํŠธ๋Š” ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋Ÿฐํƒ€์ž„์— ํ”„๋กœ๊ทธ๋žจ์—์„œ ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•จ
          • Panicking : ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋˜๋Š” ํ˜„์ƒ
        • --release ํ”Œ๋ž˜๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฆด๋ฆฌ์ฆˆ ๋ชจ๋“œ๋กœ ์ปดํŒŒ์ผ ํ•  ๊ฒฝ์šฐ ํŒจ๋‹‰์„ ์œ ๋ฐœํ•˜๋Š” ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์— ๋Œ€ํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Œ
        • ๋Œ€์‹  ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ๋ž˜ํ•‘(Wrapping) ์„ ์ถ”๊ฐ€
          • Wrapping : ํƒ€์ž…์˜ ์ตœ๋Œ“๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์€ ํƒ€์ž…์ด ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์œผ๋กœ ๋‘˜๋Ÿฌ์Œ“์ž„
        • ์ •์ˆ˜ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์˜ ๋ž˜ํ•‘ ๋™์ž‘์— ์˜์กดํ•˜๋Š” ๊ฒƒ์€ ์—๋Ÿฌ๋กœ ํŒ๋‹จ. ๋งŒ์ผ, ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ๋ž˜ํ•‘ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด ํ‘œ์ค€ lib์˜ Wrapping ํƒ€์ž… ์‚ฌ์šฉ
    • โ˜๏ธ ๋ถ€๋™ ์†Œ์ˆ˜์  ํƒ€์ž…
      • f32์™€ f64
        • ๊ฐ๊ฐ 32bit์™€ 64bit ํฌ๊ธฐ
      • ์š”์ฆ˜ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„ CPU์—์„œ๋Š” f64๊ฐ€ f32๋งŒํผ ๋น ๋ฅด๊ณ  ์ •ํ™•๋„๊ฐ€ ๋” ๋†’์œผ๋ฏ€๋กœ ๋Ÿฌ์ŠคํŠธ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์œผ๋กœ ๊ทœ์ •ํ•จ
      • f32 ํƒ€์ž…์€ ๋‹จ์ •๋„(single-precision) ๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œํ˜„
      • f64 ํƒ€์ž…์€ ๋ฐฐ์ •๋„(double-precision) ๋ถ€๋™ ์†Œ์ˆ˜์  ํ‘œํ˜„
    • โ˜๏ธ ์‚ฌ์น™ ์—ฐ์‚ฐ
      let sum 6 + 12;
      let dif = 95.5 - 63.2;
      let pro = 4 * 20;
      let quo = 56.7 / 32.2;
      let reminder = 43 % 5;
      • ์‚ฌ์น™ ์—ฐ์‚ฐ์ž ์ด์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ’ ํŽธ๊ฐ€ ํ›„ ๋ณ€์ˆ˜์— ํ• ๋‹น
    • โ˜๏ธ ๋ถˆ๋ฆฐ ํƒ€์ž…
      • true, false
      • ํฌ๊ธฐ๋Š” 1byte
    • โ˜๏ธ ๋ฌธ์ž ํƒ€์ž…
      • char ํƒ€์ž…์€ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์•ŒํŒŒ๋ฒณ ํƒ€์ž…
        • char ๋ฆฌํ„ฐ๋Ÿด์€ ์ž‘์€ ๋”ฐ์˜ดํ‘œ ํ‘œํ˜„
      • 4bytes ํฌ๊ธฐ์˜ ์œ ๋‹ˆ์ฝ”๋“œ ์Šค์นผ๋ผ๊ฐ’
      • ์œ ๋‹ˆ์ฝ”๋“œ ์Šค์นผ๋ผ๊ฐ’์˜ ๋ฒ”์œ„๋Š” U+0000 ~ U+D7FF, U+E000 ~ U+10FFFF ๊นŒ์ง€์˜ ๊ฐ’ ํฌํ•จ

๐Ÿค” Compound Type

  • ํ•˜๋‚˜์˜ ํƒ€์ž…์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๊ทธ๋ฃนํ™”ํ•œ ํƒ€์ž…

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ํŠœํ”Œ(tuples)๊ณผ ๋ฐฐ์—ด(arrays) ๋“ฑ ๋‘ ๊ฐ€์ง€ ์ปดํŒŒ์šด๋“œ ํƒ€์ž… ์ง€์›

    • โ˜๏ธ ํŠœํ”Œ ํƒ€์ž…

      • ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์—ฌ๋Ÿฌ ๊ฐ’์„ ํ•˜๋‚˜์˜ ์ปดํŒŒ์šด๋“œ ํƒ€์ž…์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ํƒ€์ž…

      • ๊ณ ์ • ๊ธธ์ด๋ฅผ ๊ฐ€์ง€๋ฉฐ, ํ•œ ๋ฒˆ ์ •์˜ํ•˜๋ฉด ๊ทธ ํฌ๊ธฐ๋ฅผ ํ‚ค์šฐ๊ฑฐ๋‚˜ ์ค„์ผ ์ˆ˜ ์—†์Œ

      • type annotation ์ ์šฉ ๊ฐ€๋Šฅ

      • ํŠœํ”Œ์—์„œ ๊ฐœ๋ณ„ ๊ฐ’์„ ์ฝ์œผ๋ ค๋ฉด ํŒจํ„ด ๋งค์นญ์„ ์ด์šฉํ•ด ํŠœํ”Œ ๊ฐ’์„ ํ•ด์ฒด(destruct) ํ•  ์ˆ˜ ์žˆ์Œ

          fn main() {
              let tup = (500, 6.4, 1);
              let (x, y, z) = tup;
        
              println!("{}, {}, {}", x, y, z);
          }
          // Result
          // 500, 6.4, 1
        • let ๊ตฌ๋ฌธ์— ํŒจํ„ด์„ ์ง€์ •ํ•ด tup ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฐ’๋“ค์„ ๊ฐœ๋ณ€ ๋ณ€์ˆ˜์— ๊ฐ๊ฐ ๋Œ€์ž…

          fn main() {
            let tup = (500, 6.4, 1);
          
            println!("{}, {}, {}", tup.0, tup.1, tup.2);
          }
        • ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜์—ฌ destruct ํ•˜๊ธฐ

    • โ˜๏ธ ๋ฐฐ์—ด ํƒ€์ž…

      • ํŠœํ”Œ๊ณผ ๋‹ฌ๋ฆฌ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ๋Š” ๋ฐ˜๋“œ์‹œ ๊ฐ™์€ ํƒ€์ž…
      • ๋Ÿฌ์ŠคํŠธ์˜ ๋ฐฐ์—ด์€ ์ผ๋ถ€ ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ๊ณ ์ • ๊ธธ์ด
      • ๋ฐฐ์—ด์€ ๋‹ค๋ฃจ๊ณ ์ž ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํž™(heap) ์ด ์•„๋‹Œ ์Šคํƒ (stack) ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•ญ์ƒ ๊ณ ์ •๋œ ๊ฐœ์ˆ˜์˜ ์š”์†Œ ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉ
      • Ex1) let a: [i32; 5] = [1, 2, 3, 4, 5];
        • i32 ํƒ€์ž…์˜ ์›์†Œ๊ฐ€ 5๊ฐœ ์ง€์ •
      • Ex2) let a = [3; 5];
        • ๊ฐ ์›์†Œ์— ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ๋ฐฐ์—ด ์„ ์–ธ
      • Vector ๋งŒํผ ์œ ์—ฐํ•˜์ง€ ์•Š์Œ
        • Vector : ํ‘œ์ค€ lib์ด ์ง€์›. ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ํฌ๊ธฐ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์กฐ์ • ๊ฐ€๋Šฅ. ๋ฐฐ์—ด๊ณผ ๋ฒกํ„ฐ ์ค‘ ์–ด๋Š ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ์ง€ ํ™•์‹ค์น˜ ์•Š์„๋•Œ๋Š” ๋ฒกํ„ฐ๋ฅผ ์„ ํƒํ•˜๋Š” ํŽธ์ด ์ข‹์Œ
    • โ˜๏ธ ๋ฐฐ์—ด ์š”์†Œ ์ ‘๊ทผ

      • ๋ฐฐ์—ด์€ ์Šคํƒ์— ํ• ๋‹น๋œ ํ•œ ๋ฉ์–ด๋ฆฌ์˜ ๋ฉ”๋ชจ๋ฆฌ
      • ์ ‘๊ทผ ์‹œ ์ธ๋ฑ์Šค ํ™œ์šฉ
    • โ˜๏ธ ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผ

      • ์ปดํŒŒ์ผ์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์—๋Ÿฌ ๋ฐœ์ƒ => ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ
      • ์ง€์ •๋œ ์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด ์ „์ฒด ๊ธธ์ด๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ธ์ง€ ๊ฒ€์‚ฌ ํ›„ ์ธ๋ฑ์Šค๊ฐ€ ๋ฐฐ์—ด ๊ธธ์ด๋ณด๋‹ค ํฌ๋‹ค๋ฉด Panic ๋ฐœ์ƒ
      • ๋Ÿฌ์ŠคํŠธ์˜ ์•ˆ์ •์„ฑ ์›๋ฆฌ ๊ฐœ์ž…์˜ ์ตœ์ดˆ ์˜ˆ์‹œ
        • ์—‰๋šฑํ•œ ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ๋Œ€์‹  ํ”„๋กœ๊ทธ๋žจ์„ ์ฆ‰๊ฐ ์ค‘๋‹จํ•˜๋Š” ๋ณดํ˜ธ ์žฅ์น˜ ์ œ๊ณต
728x90
๋ฐ˜์‘ํ˜•

'Development Study > Rust' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Rust] String Type (String, str)  (0) 2023.01.05
[Rust] Start Rust (Day 6) - Common Programming Concepts [2]  (2) 2023.01.03
[Rust] Start Rust (Day 4) - Guessing Game [3]  (0) 2022.10.27
[Rust] Start Rust (Day 3) - Guessing Game [2]  (0) 2022.08.23
[Rust] Start Rust (Day 2) - Guessing Game [1]  (0) 2022.08.09
Comments