🔥 숫자 리터럴

337자
4분

Swift에서는 다양한 형식으로 숫자 리터럴을 표현할 수 있습니다. 정수 리터럴과 부동 소수점 리터럴로 나누어 살펴보도록 하죠.

정수 리터럴

정수 리터럴은 다음과 같은 형식으로 작성할 수 있습니다.

  • 10진수: 접두사 없이 작성
  • 2진수: 0b 접두사 사용
  • 8진수: 0o 접두사 사용
  • 16진수: 0x 접두사 사용
let decimalInteger = 17         // 10진수로 17
let binaryInteger = 0b10001     // 2진수로 17
let octalInteger = 0o21         // 8진수로 17
let hexadecimalInteger = 0x11   // 16진수로 17
swift

위 코드에서 볼 수 있듯이 모든 정수 리터럴은 10진수 값 17과 동일합니다. 2진수 10001, 8진수 21, 16진수 11은 모두 10진수로 변환하면 17이 되는 거죠.

부동 소수점 리터럴

부동 소수점 리터럴은 10진수(접두사 없음) 또는 16진수(0x 접두사 사용)로 작성할 수 있습니다. 소수점을 기준으로 양쪽에 항상 숫자(또는 16진수)가 있어야 합니다. 10진수 부동 소수점은 e 또는 E로 표시되는 선택적 지수(Exponent)를 가질 수 있고, 16진수 부동 소수점은 p 또는 P로 표시되는 지수를 반드시 가져야 합니다.

지수가 x인 10진수의 경우 기본 숫자에 10ˣ을 곱합니다.

  • 1.25e2는 1.25 x 10²이므로 125.0입니다.
  • 1.25e-2는 1.25 x 10⁻²이므로 0.0125입니다.

지수가 x인 16진수의 경우 기본 숫자에 2ˣ을 곱합니다.

  • 0xFp2는 15 x 2²이므로 60.0입니다.
  • 0xFp-2는 15 x 2⁻²이므로 3.75입니다.
let decimalDouble = 12.1875
let exponentDouble = 1.21875e1
let hexadecimalDouble = 0xC.3p0
swift

위 코드의 모든 부동 소수점 리터럴은 10진수 값 12.1875와 동일하답니다.

가독성을 위한 포맷팅

숫자 리터럴은 가독성을 높이기 위해 추가적인 포맷팅을 포함할 수 있습니다. 정수와 부동 소수점 모두 앞에 0을 추가로 붙일 수 있고, 가독성을 위해 언더스코어(_)를 사용할 수 있습니다. 이러한 포맷팅은 리터럴의 기본 값에 영향을 주지 않아요.

let paddedDouble = 000123.456           // 123.456
let oneMillion = 1_000_000              // 1000000
let justOverOneMillion = 1_000_000.000_000_1   // 1000000.0000001
swift

위 코드에서 paddedDouble은 앞에 0이 추가되었지만 값은 123.456으로 동일합니다. oneMillion은 언더스코어로 자릿수를 구분했지만 값은 1000000입니다. justOverOneMillion은 정수 부분과 소수 부분에 모두 언더스코어를 사용했지만 값은 1000000.0000001로 동일하죠.

이렇게 Swift는 다양한 숫자 리터럴 표현을 지원하므로 상황에 맞는 적절한 형식을 선택하여 사용할 수 있습니다. 2진수, 8진수, 16진수 리터럴은 비트 연산이나 색상 표현 등 특정 도메인에서 유용하게 활용할 수 있고, 가독성을 위한 포맷팅은 코드의 명확성을 높이는 데 도움을 줍니다.