데이터 타입 기본
Swift의 모든 데이터 타입 이름은 첫 글자가 대문자로 시작되는 대문자 카멜케이스(Upper Camel Case
)를 사용한다.
Upper Camel Case
: 클래스, 구조체, 익스텐션, 프로토콜, 열거형 이름은 타입의 이름이기 때문에 첫 글자를 대문자로 사용한다.
ex)P
erson,S
eogunLower Camel Case
: 함수, 메서드, 인스턴스의 이름의 첫 글자를 소문자로 사용하는 소문자 카멜케이스를 사용한다.
ex) someM
ethodN
ame
Int와 UInt
Int
와 UInt
타입은 모두 정수 타입이다.
Int
는 +
, -
부호를 포함한 정수를 뜻하며, UInt
는 -
부호를 포함하지 않는 0
을 포함한 양의 정수이다.
Int
와 UInt
타입의 최댓값과 최솟값은 각각 max와 min 프로퍼티로 알아볼 수 있다.
Int
와 UInt
는 각각 8비트, 16비트, 32비트, 64비트의 형태가 있다.
즉, Int8
, Int16
, Int32
, Int64
/ UInt8
, UInt16
, UInt32
, UInt64
등으로 지정할 수 있는 데이터의 크기에 따라 타입이 분리 되어 있다.
시스템 아키텍처에 따라 Int
와 UInt
의 타입이 달라지는데, 32비트 아키텍처에서는 Int32
가 Int
타입으로, UInt32
가 UInt
타입으로 지정된다.
그리고 64비트 아키텍처에서는 Int64
가 Int
타입으로, UInt64
가 UInt
타입으로 지정된다.
Int와 UInt 중 선택해 사용
플랫폼에 따른 Int
의 최댓값(64비트 환경이라면 Int64
의 최댓값) 이상 UInt
최댓값 미만을 사용하게 되는 경우 이외 에는, UInt
보다는 Int
타입을 사용하는 것이 권장된다.
예를 들어 64비트의 환경이라면 Int64
의 최댓값과 UInt64
의 최댓값 사이의 값을 사용하는 경우 이외에 정수 타입의 값을 변수에 담고자 할 때는 Int
타입을 사용하는것이 좋다.
그리고 양수만 사용한다고 해서 굳이 UInt를 고집할 이유가 없다. Swift는 데이터 타입에 굉장히 엄격한 언어이다. 그렇기 때문에 같은 정수라고 해도 Int
와 UInt
는 완전히 다른 타입으로 인식한다.
따라서 코드 안에 Int
와 UInt
두 타입 모두 사용하려면 정수 타입의 변수끼리도 값을 교환할 때 많은 지원을 소모할 수도 있다.
var integer: Int = -20
let unsignedInteger: UInt = 20
print("integer 값: \(integer), unsignedInteger 값: \(unsignedInteger)")
//integer 값: -20, unsignedInteger 값: 20
print("Int 최대값: \(Int.max), Int 최솟값: \(Int.min)")
//Int 최대값: 9223372036854775807, Int 최솟값: -9223372036854775808
print("UInt 최대값: \(UInt.max), UInt 최대값: \(UInt.min)")
//UInt 최대값: 18446744073709551615, UInt 최대값: 0
let largeInteger: Int64 = Int64.max
let smallUnsignedInteger: UInt8 = UInt8.max
print("Int64 최댓값: \(largeInteger), UInt8 최대값: \(smallUnsignedInteger)")
//Int64 최댓값: 9223372036854775807, UInt8 최대값: 255
let tooLarge: Int = Int.max + 1 // Int의 표현 범위를 초과하므로 오류를 낸다.
let cannotBeNegetive: UInt = -5 // UInt는 음수가 될 수 없으므로 오류를 낸다.
integer = unsignedInteger // 스위프트에서 Int와 UInt는 완전히 다른 타입이므로 오류를 낸다.
integer = Int(unsignedInteger) // 그렇기 때문에 Int타입의 값으로 할당해주면 오류가 해결된다.
예를 들어 Int 정수의 배열과 UInt
정수의 배열이 있고 같은 값으로 초기화됐다고 해보자
let arrayOfInt: [Int] = [1, 2, 3]
let arrayOfUInt: [UInt] = [1, 2, 3]
이 두 인스턴스는 같아 보일지 몰라도 다음과 같은 상황을 마주할 수도 있다.
arrayOfInt as [UInt] // 에러: `[Int]` 타입을 `[UInt]` 타입으로 강제로 바꿀 수 없습니다
이를 해결 하기 위한 한 가지 방법은 map(_:) 메서드에 numericCast
함수를 인자로 넘기는 것이다.
arrayOfInt.map(numericCast) as [UInt]
읽어주셔서 감사합니다 🤟
'SWIFT > Grammar' 카테고리의 다른 글
Swift : 고급문법 [ARC 메모리 관리 2 - 강한 참조 순환 문제] (0) | 2022.02.12 |
---|---|
Swift : 고급문법 [ARC 메모리 관리 1 - 강한 참조] (0) | 2022.02.10 |
Swift: 주요 함수 [max, min, numericCast, precondition, preconditionFailure, print] (0) | 2022.02.08 |
Swift: 주요 함수 [abs, assert, assertionFailure, debugPrint, dump, fatalError] (0) | 2022.02.08 |
Swift : 스위프트의 주요 프로토콜 모음(설명) (0) | 2022.02.07 |