C.W.K.
Stream
Lesson 01 of 05 · published

스칼라 타입 & 오버플로

~11 min · types, scalars, integers, overflow

Level 0Rust 호기심러
0 XP0/80 lessons0/19 achievements
0/100 XP to next level100 XP to go0% complete

Rust 의 스칼라 타입은 의도적으로 정밀해. 많은 언어가 흐릿한 '숫자' 하나를 주는 데 비해, Rust 는 정확히 뭘 뜻하는지 말하게 해 — 그 정밀함이 기능이야.

정수

정수는 부호 있음 (i8, i16, i32, i64, i128) 과 부호 없음 (u8u128) 으로 오고, 숫자가 비트 폭이야. isize/usize 도 있는데 기계의 포인터 폭에 맞춰져 — usize 가 컬렉션을 인덱싱할 때 쓰는 거야. 추론이 기댈 게 없을 때 기본값은 i32 야.

float, bool, char

f64 가 기본 float (완전한 배정밀도); 메모리 절반이 필요하면 f32. booltrue/false. char 는 완전한 유니코드 스칼라 — 4바이트라 ASCII 뿐 아니라 이모지나 한글 한 글자를 담아. C 의 1바이트 char 랑 진짜 다른 점이야.

오버플로는 정의된 동작이지 undefined 가 아니야

타입의 최댓값을 넘겨 더하면 Rust 는 명확한 답을 가져: debug 빌드는 panic (테스트에서 버그를 잡게), release 빌드는 wrap (2의 보수, 속도 위해). 둘 다 보안 구멍을 낳는 C 식 undefined behavior 가 아니야. 명시적 동작을 원하면 말해: wrapping_add, checked_add (Option 반환), saturating_add (최댓값에 clamp).

오버플로 시 debug panic 은 선물이야. 또 컴파일러-as-멘토야: 조용히 틀린 숫자를 내거나 (C) 느린 bignum 을 내는 (Python) 대신, Rust 는 멈추고 테스트 중에 정확한 오버플로를 짚어줘. 오버플로가 그럴듯한 곳엔 명시적 `checked_*` 메서드로 출시해.

추론 더하기 표기

보통은 컴파일러가 타입을 추론하게 두지만, 중요할 땐 표기해: let big: u64 = 1; 이나 1u64 같은 접미사. 문자열을 숫자로 파싱할 땐 어느 숫자인지 말해야 해 — 스칼라를 표기하게 되는 제일 흔한 곳이야.

Code

오버플로를 명시한 스칼라·rust
fn main() {
    let signed: i32 = -42;
    let unsigned: u8 = 255;       // u8 최대; 256 은 안 들어감
    let pi = 3.14159_f64;         // 접미사가 타입을 고름
    let yes = true;
    let crab = '🦀';                 // char 는 완전한 유니코드 스칼라

    // 명시적 오버플로 처리 — 놀랄 일 없음:
    let safe = unsigned.checked_add(1); // Some(256)? 아니: None (오버플로 날 것)
    println!("{signed} {pi} {yes} {crab} {safe:?}");
}

External links

Exercise

250 을 든 u8 을 선언하고, 거기에 10 을 세 방법으로 더해봐: debug 빌드에서 그냥 + (panic 나는 거 봐), wrapping_add, checked_add. 세 결과를 비교하고 체크섬, 카운터, 게임 점수에 각각 뭘 원할지 정해봐.
Hint
그냥 + 는 debug 에서 panic; wrapping_add 는 작은 숫자로 굴러넘어가고; checked_addNone 을 반환해. 체크섬은 종종 wrapping; 점수는 보통 checked 나 saturating.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고
💛 by 똘이warm

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.