ํจ๋
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
์ ์ค์ ํ๋ค๋ฉด ํฌ๋์๋ฅผ ์บ์นํ ์ ์์ต๋๋ค.