정수(Integers)
정수(Integers)는 42나 -23처럼 양의 정수, 음의 정수, 0으로 이루어진 수의 체계를 뜻합니다. 그리고 정수는 부호가 있는 정수(양의 정수, 0, 음의 정수)와 부호가 없는 정수(양의 정수, 0)로 구분되기도 합니다.
Swift는 8비트, 16비트, 32비트, 64비트 형식으로 부호가 있는 정수(signed integers)와 부호가 없는 정수(unsigned integers)를 제공합니다. 이러한 형태의 정수들의 이름을 짓는 방법은 C 언어와 유사합니다. 이를테면 부호가 없는 8비트 정수(8-bit unsigned integer)는 UInt8의 형식을 가지며, 부호가 있는 32비트 정수(32-bit signed integer)는 Int32의 형식을 가집니다. UInt8 형식에서 U는 부호(sign)가 없다는 영어 표현 unsigned에서 U를 가리킵니다. Int는 정수의 영어 표현인 integer에서 Int만 빌려온 것입니다. Swift에서 이러한 모든 정수형 타입은 대문자로 시작합니다. 부호가 없는 정수형 타입의 경우에는 U와 I를 대문자로 작성합니다. 부호가 있는 정수형 타입의 경우에는 Int만 적습니다. 그리고 UInt 또는 Int 뒤에 붙은 숫자는 비트를 나타냅니다.
정수 한도(Integer Bounds)
min과 max 속성(property)을 통해 각 정수형 타입(integer type)의 최솟값(minimum value)과 최댓값(maximum value)이 무엇인지 알 수 있습니다.
let minValue = UInt8.min
let maxValue = UInt8.max
위 코드는 다음과 같이 글로 표현할 수 있습니다.
"minValue라는 이름의 상수에 부호가 없는 8비트 정수형 타입(UInt8 type)의 최솟값(min)을 대입합니다. 그리고 maxValue라는 이름의 상수에 부호가 없는 8비트 정수형 타입(UInt8 type)의 최댓값(max)을 대입합니다."
8비트 정수형 타입(UInt8)의 최솟값(min)과 최댓값(max)은 Swift가 알아서 구해줄 것입니다. 사용자는 그저 정수형 타입 뒤에 점(.)을 찍고 min 또는 max을 적으면 됩니다.
min과 max 속성으로 알아낸 최솟값과 최댓값은 각 정수형 타입에 따라 다른 값을 가집니다. 위 예시에서는 부호가 없는 8비트 정수형 타입(UInt8)이 사용되었으며, 이 정수형 타입의 경우에는 최솟값이 0이며 최댓값이 255입니다. UInt32, Int32 등 다른 정수형 타입에서는 최솟값과 최댓값이 달라집니다.
Int
앞에서 UInt8, UInt32, Int8, Int32 등 다양한 정수형 타입이 언급되었는데, 코드를 작성하는 대부분의 경우 이러한 여러 정수형 타입 중 어느 하나를 꼭 고르지 않아도 됩니다. Swift는 Int라는 또 다른 정수형 타입을 제공하기 때문입니다. Int 타입은 사용자가 코드를 작성하는 플랫폼(platform)의 기본적인 낱말 크기와 같은 크기를 가집니다.
이를테면, 32비트 플랫폼에서 코드를 작성하는 경우, Int 타입을 사용하면 Int32 타입과 같은 크기를 가지게 됩니다.
그리고 64비트 플랫폼에서 코드를 작성하는 경우, Int 타입을 사용하면 Int64 타입과 같은 크기를 가지게 됩니다.
다시 말해서, 사용자가 코드를 작성하는 환경에 맞게 Int 타입의 크기도 저절로 달라지는 것입니다.
만약 8비트, 16비트, 32비트, 64비트처럼 특정한 크기의 정수를 사용해야 하는 것이 아니라면, 정수 값을 위해 언제나 Int 타입을 사용하여 코드를 작성하는 것이 바람직합니다. 이를 통해 코드의 일관성(consistency)과 상호운용성(interoperability)을 높일 수 있습니다. 설령 32비트 플랫폼에서 코드를 작성하더라도 Int 타입은 -2, 147, 483, 648과 2, 147, 483, 647의 범위에 포함되는 어떤 값이든 저장할 수 있을 만큼 많은 정수 값의 범위를 지원합니다.
UInt
앞에서도 잠깐 언급이 되었듯 Swift에는 부호가 없는 정수형 타입인 UInt가 있습니다. UInt8, UInt16, UInt32, UInt64와 UInt는 다릅니다. UInt 뒤에 숫자가 붙으면 해당 타입이 가질 수 있는 값의 범위가 구체적으로 정해지지만, UInt의 경우에는 Int와 마찬가지로 사용자가 코드를 작성하는 환경에 맞게 UInt 타입의 크기도 저절로 달라집니다. UInt는 Int와 비슷한 성격을 지니되 부호가 없을 뿐입니다.
이를테면, 32비트 플랫폼에서 코드를 작성하는 경우, UInt 타입을 사용하면 UInt32 타입과 같은 크기를 가지게 됩니다.
그리고 64비트 플랫폼에서 코드를 작성하는 경우, UInt 타입을 사용하면 UInt64 타입과 같은 크기를 가지게 됩니다.
NOTE
만약 코드를 작성하는 환경의 기본적인 낱말 크기와 같은 크기를 제공하는 부호가 없는 정수형 타입을 꼭 사용해야 하는 경우라면 UInt 타입을 사용해야 하지만, 그렇지 않다면 Int 타입을 사용하는 것이 바람직합니다. UInt 타입의 경우에는 부호가 없으므로 양의 정수와 0이 이 타입에 해당합니다. 하지만 Int 타입은 부호가 존재하므로 양의 정수, 0, 음의 정수가 이 타입에 해당합니다. 설령 사용하고자 하는 정수 값이 음의 정수가 아니더라도 Int 타입을 사용하는 것이 바람직합니다. Int 타입의 일관적인 사용을 통해 코드의 상호운용성을 높일 수 있으며, 서로 다른 숫자 타입이 있을 때 이를 변환하지 않아도 됩니다. 또한, Int 타입을 사용함으로써 정수형 타입의 추론에도 도움이 됩니다.
이 글은 Apple이 제공하는 'The Swift Programming Language 5.2 버전' (https://swift.org)을 번역 및 참고하여 작성하였습니다.
'프로그래밍 팁 > Swift' 카테고리의 다른 글
1-7. Swift - 타입 세이프티와 타입 추론(Type Safety and Type Inference) 문법 개념 정리 (0) | 2020.11.05 |
---|---|
1-6. Swift - 부동소수점(Floating-point numbers) 문법 개념 정리 (0) | 2020.11.04 |
1-4. Swift - 세미콜론(Semicolons) 문법 개념 정리 (0) | 2020.11.01 |
1-3. Swift - 주석(Comments) 문법 개념 정리 (0) | 2020.10.30 |
1-2. Swift - 상수와 변수(Constants and Variables) 문법 개념 정리 (0) | 2020.10.28 |
댓글