🔥 정수

437자
5분

Swift에서 정수는 소수점 이하 자릿수가 없는 숫자를 의미해요. 예를 들어, 42-23이 정수에 해당하죠. Swift는 정수를 signed(양수, 0, 음수) 또는 unsigned(양수 또는 0) 중 하나로 분류합니다.

swift
let positiveNumber = 42
let negativeNumber = -23
let zeroNumber = 0
swift
let positiveNumber = 42
let negativeNumber = -23
let zeroNumber = 0

Swift는 8, 16, 32, 64비트 형식의 부호 있는 정수와 부호 없는 정수를 제공하는데요. 이들은 C언어와 비슷한 명명 규칙을 따라요. 8비트 부호 없는 정수는 UInt8 타입이고, 32비트 부호 있는 정수는 Int32 타입이 되겠죠.

swift
let unsignedInt: UInt8 = 255
let signedInt: Int32 = -2147483648
swift
let unsignedInt: UInt8 = 255
let signedInt: Int32 = -2147483648

Swift의 모든 타입과 마찬가지로, 이 정수 타입들은 대문자로 시작하는 이름을 가집니다.

정수 범위

minmax 속성을 사용하면 각 정수 타입의 최솟값과 최댓값에 접근할 수 있습니다. 아래 코드를 살펴보세요.

swift
let minValue = UInt8.min  // minValue는 0이고, UInt8 타입입니다.
let maxValue = UInt8.max  // maxValue는 255이고, UInt8 타입입니다.
 
print("UInt8 범위: \(minValue) ~ \(maxValue)")
// 출력: "UInt8 범위: 0 ~ 255"
swift
let minValue = UInt8.min  // minValue는 0이고, UInt8 타입입니다.
let maxValue = UInt8.max  // maxValue는 255이고, UInt8 타입입니다.
 
print("UInt8 범위: \(minValue) ~ \(maxValue)")
// 출력: "UInt8 범위: 0 ~ 255"

이 속성들의 값은 적절한 크기의 숫자 타입(위 예제에서는 UInt8)으로 되어 있어서, 같은 타입의 다른 값들과 함께 표현식에서 사용할 수 있어요.

swift
let underflowExample = UInt8.min - 1 // 런타임 에러: arithmetic overflow
let overflowExample = UInt8.max + 1 // 런타임 에러: arithmetic overflow
swift
let underflowExample = UInt8.min - 1 // 런타임 에러: arithmetic overflow
let overflowExample = UInt8.max + 1 // 런타임 에러: arithmetic overflow

Int

대부분의 경우, 코드에서 특정 크기의 정수를 선택할 필요는 없습니다. Swift는 추가로 Int 정수 타입을 제공하는데, 이는 현재 플랫폼의 기본 워드 크기와 같은 크기를 가져요.

swift
let anInteger = 42 // Int 타입으로 추론됩니다
swift
let anInteger = 42 // Int 타입으로 추론됩니다
  • 32비트 플랫폼에서는 IntInt32와 같은 크기를 가집니다.
  • 64비트 플랫폼에서는 IntInt64와 같은 크기를 가지죠.

특정 크기의 정수를 다룰 필요가 없다면, 코드에서 정수 값에는 항상 Int를 사용하세요. 이는 코드의 일관성과 상호운용성을 높여줍니다.

swift
let num1: Int = 100
let num2: Int = -42
 
print(num1 + num2) // 58
swift
let num1: Int = 100
let num2: Int = -42
 
print(num1 + num2) // 58

32비트 플랫폼에서도 Int-2,147,483,648에서 2,147,483,647 사이의 어떤 값이라도 저장할 수 있고, 많은 정수 범위에 충분히 큰 크기를 가지고 있어요.

UInt

Swift는 부호 없는 정수 타입 UInt도 제공하는데, 이 역시 현재 플랫폼의 기본 워드 크기와 같은 크기를 가집니다.

swift
let unsignedInteger: UInt = 100
swift
let unsignedInteger: UInt = 100
  • 32비트 플랫폼에서는 UIntUInt32와 같은 크기를 가져요.
  • 64비트 플랫폼에서는 UIntUInt64와 같은 크기를 가지죠.

이렇게 정수의 크기와 범위, 그리고 IntUInt 타입에 대해 알아봤는데요. 코드에서 정수를 다룰 때 이 개념들을 잘 이해하고 적절한 타입을 선택하는 것이 중요해요.

swift
let num1 = 42 // Int
let num2: UInt = 30 // UInt
 
// let sum = num1 + num2 // 컴파일 에러: Binary operator '+' cannot be applied to operands of type 'Int' and 'UInt'
let sum = num1 + Int(num2) // Int와 UInt는 섞어서 사용할 수 없으므로, 같은 타입으로 변환해줘야 합니다.
swift
let num1 = 42 // Int
let num2: UInt = 30 // UInt
 
// let sum = num1 + num2 // 컴파일 에러: Binary operator '+' cannot be applied to operands of type 'Int' and 'UInt'
let sum = num1 + Int(num2) // Int와 UInt는 섞어서 사용할 수 없으므로, 같은 타입으로 변환해줘야 합니다.

대부분의 경우 Int를 사용하되, 때로는 더 작은 크기나 부호 없는 정수가 필요할 수도 있겠죠? 그럴 때는 적당한 타입을 골라 사용하면 됩니다.

YouTube 영상

채널 보기
Pro펑터, 입력과 출력을 동시에 다루는 펑터 | 프로그래머를 위한 카테고리 이론
존 매카시가 들려주는 인공지능의 탄생 이야기
바이펑터란? | 프로그래머를 위한 카테고리 이론
NestJS 빌트인 파이프 ParseIntPipe, ParseUUIDPipe 사용하기 | NestJS 가이드
NestJS 파이프가 뭔가요? 컨트롤러를 보호하는 방법 | NestJS 가이드
Const 펑터 - 아무것도 안 하는 펑터가 필요한 이유 | 프로그래머를 위한 카테고리 이론
입력을 전처리하는 Functor - Contravariant와 contramap 이해하기 | 프로그래머를 위한 카테고리 이론
C++ 속의 펑터 | 프로그래머를 위한 카테고리 이론