Ethereum-Solidity 퀴즈 Q29: Overflow/Underflow란?

발행: (2026년 2월 8일 오전 02:41 GMT+9)
3 분 소요
원문: Dev.to

Source: Dev.to

오버플로우와 언더플로우

오버플로우와 언더플로우는 계산 결과가 변수 데이터 타입의 고정 범위를 벗어날 때 발생하는 산술 오류입니다.

용어발생 상황예시 (uint8: 범위 0–255)
Overflow최대값을 초과하면 숫자가 “처음으로” 돌아갑니다.255 + 1 --> 0
Underflow최소값 이하로 내려가면 숫자가 “맨 위로” 점프합니다.0 - 1 --> 255

Solidity 0.8.0 이전 버전

버전 0.8.0 이전에는 Solidity가 이러한 오류를 검사하지 않았습니다. 개발자는 SafeMath와 같은 라이브러리를 사용해 오버플로우와 언더플로우를 방지해야 했습니다.

Solidity 0.8.0 이후

Solidity 0.8.0부터는 컴파일러에 내장된 검사가 포함됩니다. 오버플로우나 언더플로우가 발생하면 트랜잭션이 자동으로 Panic 오류와 함께 되돌아갑니다.

unchecked 블록

계산이 안전하다고 확신하고 가스 절감을 위해 검사를 건너뛰고 싶다면, 코드를 unchecked 블록으로 감쌀 수 있습니다:

// This will NOT revert; it will wrap around to 0
unchecked {
    uint8 x = 255;
    x++; 
}

타입 캐스팅 주의

Solidity 0.8.0+에서도 큰 타입을 작은 타입으로 캐스팅할 때(예: uint256uint8) 되돌아가지 않고 조용히 래핑될 수 있습니다. 캐스팅하기 전에 값이 대상 타입의 범위에 들어가는지 반드시 확인하세요.

권장 사항: uint256 사용

특별한 이유(예: 데이터를 하나의 32바이트 저장 슬롯에 맞추는 경우)가 아니라면 uint256을 사용하는 것이 좋습니다. 그 방대한 범위(2^256 - 1) 덕분에 일반적인 금융 애플리케이션에서는 오버플로우가 사실상 불가능합니다.

Back to Blog

관련 글

더 보기 »

컴퓨터가 드디어 듣게 되었다

당신이 원하는 것을 아는 바텐더 컴포스텔라에 있는 어느 바—어느 바인지 말하지 않을게요, 그렇지 않으면 모두가 가서 망쳐버릴 테니까—에서 바텐더가 n...