솔리디티에서 'uint'와 'int'의 차이는 무엇인가요?

_____
Q: 솔리디티에서 'uint'와 'int'의 차이는 무엇인가요?

A: 솔리디티에서 `uint`와 `int`는 정수형(integer) 타입을 나타내지만, 두 타입 간에는 다음과 같은 주요 차이점이 있습니다.

1. 부호(Sign) 여부
- `uint`는 *부호 없는 정수*(unsigned integer) 타입으로, 0과 양의 정수만 표현할 수 있습니다.
- `int`는 *부호 있는 정수*(signed integer) 타입으로, 음수와 양수 모두 표현할 수 있습니다.

2. 비트 크기 및 기본 크기
- `uint`와 `int` 모두 다양한 비트 크기(`uint8`, `uint16`, ..., `uint256`, `int8`, `int16`, ..., `int256`)를 지원하며, 비트 크기에 따라 표현 가능한 값의 범위가 달라집니다.
- 기본적으로 `uint`는 `uint256`, `int`는 `int256`으로 간주됩니다.

3. 값의 범위
- `uintN` (N비트 부호 없는 정수): 0부터 2^N - 1까지 값을 가질 수 있습니다.
- `intN` (N비트 부호 있는 정수): -2^(N-1)부터 2^(N-1) - 1까지 값을 가질 수 있습니다.

4. 오버플로우 및 언더플로우 처리
- 부호 없는 정수(`uint`)는 값이 0보다 작을 수 없기 때문에 언더플로우가 발생하면 최대값(`2^N - 1`)으로 랩어라운드(overflow) 됩니다.
- 부호 있는 정수(`int`)는 음수 영역을 표현하기 때문에 오버플로우/언더플로우 시 예상과 다른 결과가 발생할 수 있고, 최신 솔리디티에서는 SafeMath 혹은 내장 체크 기능을 사용해 방지하는 것이 권장됩니다.

5. 용도
- `uint`는 보통 음수가 필요없는 경우(예: 카운터, 잔고 등)에 사용됩니다.
- `int`는 음수 값을 표현해야 하는 경우(예: 온도, 차감 연산 등)에 사용됩니다.

---

정리:
- `uint` = 부호 없는 정수, 0 이상만 표현
- `int` = 부호 있는 정수, 음수와 양수 모두 표현

사용 목적과 필요한 값 범위에 따라 적절한 타입을 선택하는 것이 중요합니다.
솔리디티(Solidity)는 이더리움 블록체인에서 스마트 계약을 작성하기 위해 설계된 프로그래밍 언어입니다.

이 언어에서 데이터 타입은 매우 중요하며, 특히 숫자 타입인 `uint`와 `int`는 자주 사용됩니다.

이 두 타입의 차이를 이해하는 것은 스마트 계약을 작성할 때 필수적입니다.

1. 기본 개념 - uint : `uint`는 "unsigned integer"의 약자로, 부호가 없는 정수를 나타냅니다.

즉, `uint`는 0 이상의 정수만을 표현할 수 있습니다.

기본적으로 `uint`는 256비트 크기를 가지며, 이는 0부터 2^256 - 1까지의 값을 가질 수 있습니다.

솔리디티에서는 `uint` 외에도 `uint8`, `uint16`, `uint32`, ..., `uint256`과 같은 다양한 크기의 부호 없는 정수를 지원합니다.

- int : `int`는 "signed integer"의 약자로, 부호가 있는 정수를 나타냅니다.

즉, `int`는 음수와 양수 모두를 표현할 수 있습니다.

기본적으로 `int`도 256비트 크기를 가지며, 이는 -2^255부터 2^255 - 1까지의 값을 가질 수 있습니다.

마찬가지로 `int`도 `int8`, `int16`, `int32`, ..., `int256`과 같은 다양한 크기의 부호 있는 정수를 지원합니다.



2. 사용 예시 - uint 사용 예시 : ```solidity uint256 public totalSupply; function increaseSupply(uint256 amount) public { totalSupply += amount; // amount는 항상 0 이상의 값이어야 함 } ``` - int 사용 예시 : ```solidity int256 public balance; function adjustBalance(int256 amount) public { balance += amount; // amount는 음수일 수도 있고 양수일 수도 있음 } ```

3. 차이점 - 부호 : 가장 큰 차이점은 부호의 유무입니다.

`uint`는 음수를 가질 수 없지만, `int`는 음수와 양수를 모두 가질 수 있습니다.

이로 인해 `uint`는 주로 수량, 인덱스, 카운터 등과 같이 음수가 의미가 없는 경우에 사용됩니다.

반면, `int`는 잔액, 차이, 변화량 등 음수 값이 의미가 있는 경우에 사용됩니다.

- 범위 : `uint`는 0부터 시작하여 매우 큰 양수까지 표현할 수 있는 반면, `int`는 음수와 양수를 모두 포함하므로 범위가 다릅니다.

예를 들어, `uint256`은 0에서 2^256 - 1까지의 값을 가질 수 있지만, `int256`은 -2^255에서 2^255 - 1까지의 값을 가질 수 있습니다.



4. 성능 및 가스 비용 부호 있는 정수(`int`)와 부호 없는 정수(`uint`)는 이더리움 가상 머신(EVM)에서 비슷한 방식으로 처리되지만, 부호 없는 정수는 특정 상황에서 더 효율적일 수 있습니다.

예를 들어, `uint`는 항상 0 이상의 값만을 가질 수 있기 때문에, 특정 최적화가 가능할 수 있습니다.

그러나 이러한 차이는 일반적으로 미미하며, 가스 비용에 큰 영향을 미치지는 않습니다.



5. `uint`와 `int`는 각각 부호가 있는 정수와 부호가 없는 정수를 나타내며, 사용 목적에 따라 적절한 타입을 선택하는 것이 중요합니다.

음수 값이 필요하지 않은 경우에는 `uint`를 사용하고, 음수 값이 필요할 경우에는 `int`를 사용하는 것이 좋습니다.

이러한 선택은 코드의 가독성과 안전성을 높이는 데 기여할 수 있습니다.

작성자: 최현우 [비회원] | 작성일자: 1년 전 2024-11-22 19:32:07
조회수: 293 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.