소피it블로그

[Swift 공식문서] The Basics 정리 (5) - Numeric Literals, Numeric Type Conversion 본문

개발_iOS/스위프트

[Swift 공식문서] The Basics 정리 (5) - Numeric Literals, Numeric Type Conversion

sophie_l 2022. 5. 12. 10:00

https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html

 

The Basics — The Swift Programming Language (Swift 5.6)

The Basics Swift is a new programming language for iOS, macOS, watchOS, and tvOS app development. Nonetheless, many parts of Swift will be familiar from your experience of developing in C and Objective-C. Swift provides its own versions of all fundamental

docs.swift.org

1. Numeric Literals

  • 정수 타입은 소수(decimal), 2진수, 8진수, 16진수로 나타낼 수 있다.
  • 2진수는 앞에 0b, 8진수는 0o, 16진수는 0x를 붙여준다.
  • 실수 타입은 소수(decimal) 혹은 16진수로 나타낼 수 있고, 16진수의 경우 앞에 0x를 붙여준다.
  • 실수 타입은 소수점 앞뒤로 반드시 숫자가 있어야 한다.
  • decimal 실수는 지수(exponent)를 취할 수 있는데, 대문자 혹은 소문자의 e를 사용한다.
1.25e2 means 1.25 x 10^2, or 125.0
1.25e-2 means 1.25 x 10^(-2), or 0.0125
  • 16진수 실수는 반드시 지수를 취해야 하며, 대문자 혹은 소문자 p를 사용한다.
0xFp2 means 15 x 2^2, or 60.0
0xFp-2 means 15 x 2^(-2), or 3.75
  • 정수 타입, 실수 타입은 가독성을 위해 추가로 0을 붙여도 되고, 1000 단위로 (컴마 대신) _(underscore)를 붙여도 된다.

 

2. Numeric Type Conversion

통일성과 사용성을 위해 웬만하면 정수형 상수, 변수는 Int로 통일하라. 다른 정수 타입은 반드시 써야 할 경우에만 써라.

  • Integer Conversion: 여러 정수 타입은 각각 저장할 수 있는 수의 범위가 다르다. UInt8과 Int8이 다르고, UInt8과 UInt16 또한 다르다. 따라서 서로 다른 타입끼리 연산을 하기 위해서는 하나의 타입으로 통일해줘야 한다. SomeType(ofInitialValue)의 형식으로 타입 변환을 해줄 수 있는데, 아무 타입이나 가능한 것은 아니고 SomeType이 이니셜라이저를 제공하는 경우에 한한다.
let twoThousand: UInt16 = 2_000
let one: UInt8 = 1
let twoThousandAndOne = twoThousand + UInt16(one)
  • Integer and Floating-Point Conversion: 스위프트에서는 정수형 상수 / 변수와 실수형 상수 / 변수의 연산을 허용하지 않기 때문에 연산에 앞서 반드시 타입을 변환해줘야 한다. 실수형을 정수형으로 변환할 때는 소숫점 뒤를 버림한다.
let three = 3
let pointOneFourOneFiveNine = 0.14159
let pi = Double(three) + pointOneFourOneFiveNine
// pi equals 3.14159, and is inferred to be of type Double

let integerPi = Int(pi)
// integerPi equals 3, and is inferred to be of type Int

또한 주의할 점은, 숫자형 상수와 변수의 연산과 numeric literals 즉 숫자 자체의 연산은 다르다는 것이다. 3이라는 literal value는 0.14159라는 또 다른 literal value에 직접적으로 더해질 수 있다. number literals 그 자체는 explicit한 타입이 없기 때문. 컴파일러가 점검할 때에 타입이 추론되는 것이다.