궁금한 내용을 검색해보세요!
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
서근 개발노트
티스토리에 팔로잉
SWIFT/Grammar

Swift: 기초문법 [데이터 타입 - Int와 UInt (feat.카멜케이스)]

서근
QUOTE THE DAY

-
Written by SeogunSEOGUN

반응형

본 게시글은 yagom님의 Swift 프로그래밍 3판을 참고하여 작성되었습니다.

 

데이터 타입 기본

Swift의 모든 데이터 타입 이름은 첫 글자가 대문자로 시작되는 대문자 카멜케이스(Upper Camel Case)를 사용한다.

  • Upper Camel Case: 클래스, 구조체, 익스텐션, 프로토콜, 열거형 이름은 타입의 이름이기 때문에 첫 글자를 대문자로 사용한다.
    ex) Person, Seogun
  • Lower Camel Case: 함수, 메서드, 인스턴스의 이름의 첫 글자를 소문자로 사용하는 소문자 카멜케이스를 사용한다.
    ex) someMethodName

Int와 UInt

IntUInt 타입은 모두 정수 타입이다.

 

Int+, - 부호를 포함한 정수를 뜻하며, UInt- 부호를 포함하지 않는 0을 포함한 양의 정수이다. 

 

IntUInt 타입의 최댓값과 최솟값은 각각 max와 min 프로퍼티로 알아볼 수 있다.

 

IntUInt는 각각 8비트, 16비트, 32비트, 64비트의 형태가 있다.

 

즉, Int8, Int16, Int32, Int64 / UInt8, UInt16, UInt32, UInt64등으로 지정할 수 있는 데이터의 크기에 따라 타입이 분리 되어 있다.

 

시스템 아키텍처에 따라 IntUInt의 타입이 달라지는데, 32비트 아키텍처에서는 Int32Int 타입으로, UInt32UInt 타입으로 지정된다.

 

그리고 64비트 아키텍처에서는 Int64Int 타입으로, UInt64UInt 타입으로 지정된다. 

Int와 UInt 중 선택해 사용

플랫폼에 따른 Int의 최댓값(64비트 환경이라면 Int64의 최댓값) 이상 UInt 최댓값 미만을 사용하게 되는 경우 이외 에는, UInt보다는 Int 타입을 사용하는 것이 권장된다.

 

예를 들어 64비트의 환경이라면 Int64의 최댓값과 UInt64의 최댓값 사이의 값을 사용하는 경우 이외에 정수 타입의 값을 변수에 담고자 할 때는 Int 타입을 사용하는것이 좋다.

 

그리고 양수만 사용한다고 해서 굳이 UInt를 고집할 이유가 없다. Swift는 데이터 타입에 굉장히 엄격한 언어이다.  그렇기 때문에 같은 정수라고 해도 IntUInt완전히 다른 타입으로 인식한다.

 

따라서 코드 안에 IntUInt 두 타입 모두 사용하려면 정수 타입의 변수끼리도 값을 교환할 때 많은 지원을 소모할 수도 있다.

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]

 

 

읽어주셔서 감사합니다 🤟

 

 


잘못된 내용이 있으면 언제든 피드백 부탁드립니다.


서근


위처럼 이미지 와 함께 댓글을 작성할 수 있습니다.