Tech Lab3 min read
솔리디티 코스 #5: 정수타입 핵심 실전 가이드북(uint/int)
솔리디티 숫자 타입의 핵심을 한 번에 정리합니다. uint/int 범위, 연산 규칙, 0.8.x의 오버플로우 방지와 안전한 코딩 팁을 예제로 확인하세요.
#solidity#number#types#uint#int#range#solidity#0.8#overflow#smart#contract#math#safe#arithmetic
독자는 이 글을 통해 Solidity의 숫자 타입 설계 의도와 안전한 사용법을 빠르게 이해하며, 스마트 컨트랙트에서 숫자 연산으로 인한 오류를 예방하는 방법을 얻게 됩니다.

숫자 타입 한눈에 이해
- Solidity는 부동소수점을 지원하지 않으며, 정수형만 제공합니다.
- 실수 계산이 필요하면 스케일링(예: 1e18 배수)로 정수화해 처리합니다.
- 타입 불일치(
uintvsint)는 암묵 변환에 의존하지 말고 명시적 캐스팅을 권장합니다.
주의: 토큰, 금액, 카운터는 부호 없는 정수(
uint)가 기본 선택입니다.
부호 없는 정수(uint)와 부호 있는 정수(int)
uint는 0 이상만 저장하며uint8~uint256(8비트 단위)로 제공됩니다.int는 음수/양수 모두 저장하며int8~int256로 제공됩니다.- 기본 별칭:
uint == uint256,int == int256.
비트 크기별 개요 표
| 타입 | 비트 | 값 범위 요약 |
|---|---|---|
| uint8 | 8 | 0 ~ 255 |
| uint256 | 256 | 0 ~ 2²⁵⁶-1 |
| int8 | 8 | -128 ~ 127 |
| int256 | 256 | -2²⁵⁵ ~ 2²⁵⁵-1 |
팁: 범위를 초과하는 값은 0.8.x에서 자동으로 예외가 발생하므로 테스트에서 에지 케이스를 반드시 포함하세요.
기본 연산과 안전 패턴
- 지원 연산:
+,-,*,/,%, 지수** - 0으로 나누기 방지, 타입 혼합 회피, 명시적 캐스팅이 핵심입니다.
// 사칙연산과 모듈러
contract MathOperations {
function add(uint256 a, uint256 b) external pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) external pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) external pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) external pure returns (uint256) {
require(b > 0, "division by zero");
return a / b; // 정수 나눗셈(내림)
}
function mod(uint256 a, uint256 b) external pure returns (uint256) {
require(b > 0, "division by zero");
return a % b;
}
}
주의: 정수 나눗셈은 소수점을 버립니다. 가격·수수료 계산 시 스케일링(amount * 1e18 / price) 순서에 주의하세요.
지수, 최소·최대, 실전 스니펫
- 지수 연산자는
**이며 오버플로우에 특히 주의합니다. - 삼항 연산자로 간단한 비교 로직을 구성할 수 있습니다.
contract Utils {
function pow(uint256 base, uint256 exp) external pure returns (uint256) {
return base ** exp; // 예: 2 ** 5 == 32
}
function min(uint256 a, uint256 b) external pure returns (uint256) {
return a < b ? a : b;
}
function max(uint256 a, uint256 b) external pure returns (uint256) {
return a > b ? a : b;
}
}
팁: 반복 제곱이 필요하면 루프/제곱 분할 정복보다, 사용 빈도·가스 비용을 검토한 뒤 구현을 선택하세요.
0.8.x의 오버/언더플로우 체크
- Solidity 0.8.x부터 산술 오버/언더플로우가 자동 검사되어 예외를 던집니다.
- 0.8.x 이전처럼 SafeMath를 별도 사용하지 않아도 됩니다(특수 최적화 목적 제외).
contract OverflowProtection {
function test(uint8 a, uint8 b) external pure returns (uint8) {
return a + b; // 255 초과 시 revert
}
}
주의: 외부 호출 결과를 더하거나 곱할 때 입력 검증을 선행하세요. 예외 발생은 상태 변경을 되돌리지만, 가스가 불필요하게 소비될 수 있습니다.
실무 체크리스트와 베스트 프랙티스
- 금액·수량·카운터:
uint256통일로 연산 오류와 캐스팅 비용 최소화. - 음수 가능성: 비즈니스 로직에 엄밀히 필요할 때만
int사용. - 스케일링 고정 소수점:
DECIMALS상수로 단위 일관성 유지. - 테스트: 경계값(최대·최소), 0 나눗셈, 지수 오버플로우 케이스 포함.
- 리뷰: 타입 혼합 연산, 암묵 변환 경고, 나눗셈 순서 점검.

다음 글 알림을 원하시면 구독하시고, 시리즈 인덱스에서 학습 순서대로 이어서 읽어 보세요!