ํŒจ๋‹‰

Rust๋Š” โ€™ํŒจ๋‹‰โ€™์œผ๋กœ ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋Ÿฌ์ŠคํŠธ๋Š” ์ˆ˜ํ–‰ ์ค‘ ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋‚˜๋ฉด ํŒจ๋‹‰์„ ๋ฐœ์ƒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค:

fn main() {
    let v = vec![10, 20, 30];
    println!("v[100]: {}", v[100]);
}
  • ํŒจ๋‹‰์€ ๋ณต๊ตฌํ•  ์ˆ˜ ์—†๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
    • ํŒจ๋‹‰์€ ํ”„๋กœ๊ทธ๋žจ์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
    • ๊ฒฝ๊ณ„ ๊ฒ€์‚ฌ ์‹คํŒจ์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ ์‹คํŒจ๋กœ ์ธํ•ด ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์‹คํŒจ ์‹œ ์–ด์„ค์…˜(์˜ˆ: assert!) ํŒจ๋‹‰
    • ๋ชฉ์ ๋ณ„ ํŒจ๋‹‰์€ panic! ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒจ๋‹‰์€ ์Šคํƒ์„ โ€™ํ•ด์ œโ€™ํ•˜์—ฌ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ’์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
  • ์ถฉ๋Œ(ํฌ๋ž˜์‹œ)์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ํŒจ๋‹‰์„ ์œ ๋ฐœํ•˜์ง€ ์•Š๋Š” API(Vec::get๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
This slide should take about 3 minutes.

๊ธฐ๋ณธ์ ์œผ๋กœ, ํŒจ๋‹‰์ด ๋ฐœ์ƒํ•˜๋ฉด ์Šคํƒ ๋˜๊ฐ๊ธฐ๋ฅผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํƒ ๋˜๊ฐ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์บ์น˜๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

use std::panic;

fn main() {
    let result = panic::catch_unwind(|| "๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.");
    println!("{result:?}");

    let result = panic::catch_unwind(|| {
        panic!("์ด๋Ÿฐ");
    });
    println!("{result:?}");
}
  • ํฌ์ฐฉ์€ ํ”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. catch_unwind๋กœ ์˜ˆ์™ธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ๋งˆ์„ธ์š”.
  • ์ด๊ฒƒ์€ ๋‹จ์ผ ์š”์ฒญ์ด ํฌ๋ž˜์‹œ ๋˜๋”๋ผ๋„ ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์† ์‹คํ–‰๋˜์•ผ ํ•˜๋Š” ์„œ๋ฒ„์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ Cargo.toml์„ค์ •ํŒŒ์ผ์— panic = abort์„ ์„ค์ •ํ–ˆ๋‹ค๋ฉด ํฌ๋ž˜์‹œ๋ฅผ ์บ์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.