ํŠœํ”Œ

๊ฐ ํ•„๋“œ ์ด๋ฆ„์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋ฉด ํŠœํ”Œ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

struct Point(i32, i32);

fn main() {
    let p = Point(17, 23);
    println!("({}, {})", p.0, p.1);
}

ํŠœํ”Œ ๊ตฌ์กฐ์ฒด๋Š” ์ข…์ข… ๋‹จ์ผ ํ•„๋“œ์˜ ๋ž˜ํผ(wrapper, ๋Ÿฌ์ŠคํŠธ์—์„œ ๋‰ดํƒ€์ž…(newtype)์ด๋ผ๊ณ  ๋ถ€๋ฆ„)๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

struct PoundsOfForce(f64);
struct Newtons(f64);

fn compute_thruster_force() -> PoundsOfForce {
    todo!("NASA ๋กœ์ผ“ ๊ณผํ•™์ž์—๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”")
}

fn set_thruster_force(force: Newtons) {
    // ...
}

fn main() {
    let force = compute_thruster_force();
    set_thruster_force(force);
}
This slide should take about 10 minutes.
  • ๋‰ดํƒ€์ž…์€ ๊ธฐ๋ณธ ํƒ€์ž…์— ๋ถ€๊ฐ€์ ์ธ ์˜๋ฏธ๋ฅผ ๋”ํ•˜๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:
    • ์ˆซ์ž๊ฐ’์— ๋‹จ์œ„๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Œ: ์œ„์—์„œ Newtons์ด ๊ทธ ์˜ˆ์ž…๋‹ˆ๋‹ค.
    • The value passed some validation when it was created, so you no longer have to validate it again at every use: PhoneNumber(String) or OddNumber(u32).
  • Newtons ํƒ€์ž…์˜ ๊ฐ’์— f64 ๊ฐ’์„ ๋”ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ์„ธ์š”.
    • ๋Ÿฌ์ŠคํŠธ๋Š” ๋ถ„๋ช…ํ•˜์ง€ ์•Š์€ ๊ฒƒ์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ž๋™์œผ๋กœ unwrapํ•˜๊ฑฐ๋‚˜ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’์„ ์ •์ˆ˜ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋“ค์ด ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
    • ์—ฐ์‚ฐ์ž ์žฌ์ •์˜๋Š” 3์ผ์ฐจ ์ œ๋„ค๋ฆญ ๋ถ€๋ถ„์—์„œ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
  • ์ด๋Š” ํ™”์„ฑ ๊ธฐํ›„ ๊ถค๋„์„  (Mars Climate Orbiter)์˜ ์‹คํŒจ ์›์ธ์œผ๋กœ ์ง€๋ชฉ๋œ ๋„๋Ÿ‰ํ˜• ์ž…๋ ฅ ์˜ค๋ฅ˜๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.