본문 바로가기

Apple/Swift

[Swift] 데이터 타입_숫자형

해당 포스팅은 The Swift Programming Language (5.9.2) 버전으로 작성되었습니다.

 

 

 

 

안녕하세요! 마루입니다. 😬

 

2024년의 2월이 다가왔습니다~~~

지금은 한창 2023 카타르 아시안컵 진행 중인데요!

오늘 밤에!! 대한민국 vs 호주 8강 경기가 진행됩니다 ⚽️

꼭 이겨라아아아아아아 ~~~~~ 🥳

 

경기 시작하기를 기다리면서...

열심히 블로그를 작성해보겠습니다!!

 

우리나라 축구 국가대표팀 미쳤다 ㅠㅠ 🇰🇷

결승전 가즈아아앗!!!!

 

 

 

 

오늘의 주제는

데이터 타입_숫자형

입니다 !!!!

 

 

타입이 뭔지 기억이 가물가물 하신 분을 위해

골든 리트리버, 푸들, 보더 콜리, 비숑은 무슨 타입일까요~~? 강아지 타입 입니다. 🐶

러시안블루, 먼치킨, 뱅갈, 페르시안은 ~? 고양이 타입 입니다. 🐱

 

공통점이 있는 여러 개체들을 통틀어서 타입이라고 하지요.

 

Swift에는 수많은 타입이 존재하는데요, 오늘은 그중에서 숫자 데이터들을 다루는

숫자형 데이터 타입에 대해서 알아봅니다!

(다음 포스팅에서는 문자들을 다루는 데이터 타입을 알아볼 거예요 🤓)

 

 1️⃣ 정수(Integer)

 

학창 시절에 배웠던 정수... 기억나시나요!!!

정수는 42, -32, 0과 같이 분수가 아닌  모든 숫자를 말합니다.

 

정수를 크게 2가지로 나눠보겠습니다.

부호가 있는 정수(signed) : +나 -가 붙은 정수 그리고 0

부호가 없는 정수(unsigned) : +가 붙은 정수 그리고 0

로 나눌 수 있습니다.

 

조금 더 나눠볼까요~~?
(그...그만해!! 뭘 이렇게 디테일하게 나눠요!?😮)

bit 부호가 있는 정수(signed) 부호가 없는 정수(unsigned)
8bit Int8 UInt8
16bit Int16 UInt16
32bit Int32 UInt32
64bit Int64 UInt64

 

정수를 나타내는 데이터 타입이 참 많죠? 저게 다 어떤 차이가 있냐구요??

bit가 높을수록 더 큰 범위의 수를 나타낼 수 있습니다.

다음의 예시 코드처럼 각 타입이 나타낼 수 있는 최소(min), 최대(max) 값을 알 수 있습니다.

// MARK: - min, max 라는 타입 프로퍼티를 활용하여 최소값 최대값 확인하기

let minInt8Value: Int8 = Int8.min  // Int8의 최소값은 -128
let maxInt8Value: Int8 = Int8.max  // Int8의 최대값은 127

let minUInt8Value: UInt8 = UInt8.min  // UInt8의 최소값은 0
let maxUInt8Value: UInt8 = UInt8.max  // UInt8의 최대값은 255

let minInt16Value: Int16 = Int16.min  // Int8의 최소값은 -32,768
let maxInt16Value: Int816= Int16.max  // Int8의 최대값은 32,767

let minUInt16Value: UInt16 = UInt16.min  // UInt8의 최소값은 0
let maxUInt16Value: UInt16 = UInt16.max  // UInt8의 최대값은 65,535

 

 

그럼 매 번 숫자형 데이터 타입을 사용할 때 저 8가지 중 1개를 골라서 사용해야 하나요?

라고 생각이 드실 겁니다.

 

물론 컴파일러가 타입 추론을 알아서 해줄 수 있지만

어떤 데이터 타입으로 추론해 줄지 한 번 같이 볼까요?? 🧐

!?!?

 

someNumber 는 Int8

otherNumber 는 Int16

으로 추론할 줄 알았는데, 둘 다 Int 라고 추론이 되었네요!!

Int 라는 데이터 타입은 위에 표에서 보이지도 않는걸요...🤪

 

 

사실 여러분들이 정수 데이터 타입을 사용할 때는

위 표의 8가지 데이터 타입은 기억하지 않고, 그냥 Int 만 쓰시면 됩니다!!!!!!!!

 

Swift에서는 Int라는 추가적인 정수형 데이터 타입을 제공하는데,

이는 플랫폼의 사이즈(32bit or 64bit)에 적절한 Int 타입을 자동으로 제공합니다.

그리고 부호가 없는 정수를 위해 UInt 또한 제공하지요.

 

하. 지. 만. Apple에서는 특수한 경우가 아니라면 부호가 있는 정수든, 부호가 없는 정수든

Int로 통일해서 코딩할 것을 권장합니다.

왜냐하면 코드의 일관성과 상호 운용성 때문이지요!!!

 

 

이쯤에서 공식 문서를 한 번 볼까요 📄
(문서 일부를 발췌했습니다. 자세한 내용은 위 링크를 확인해 주세요. 🙂)

Integers are whole numbers with no fractional component, such as 42 and -23. Integers are either signed (positive, zero, or negative) or unsigned (positive or zero).

In most cases, you don’t need to pick a specific size of integer to use in your code. Swift provides an additional integer type, Int

Unless you need to work with a specific size of integer, always use Int for integer values in your code. This aids code consistency and interoperability.

정수는 42나 -23 같이 분수의 특성이 없는 모든 수를 말한다.
정수는 부호가 있는 정수(양수, 음수, 0)와 부호가 없는 정수(양수, 0)가 있다.

대부분의 경우에서 당신은 코드에서 정수를 사용할 때, 특정한 사이즈를 고를 필요가 없다.
Swift에서는 Int라는 추가적인 타입을 제공한다.

특정한 크기의 정수가 필요한 것이 아닌 이상, 항상 당신의 코드에서 Int를 사용해라.
이것은 코드의 일관성과 상호 운용성에 도움이 된다.

fractional: 분수의 / Unless: ~하지 않는 한 / aid: 돕다 / consistency: 일관성 / interoperability: 상호 운용성

 

 

파이는 3.14159 이구요, 마라톤의 완주 길이는 42.195km 인데

이런 소수는 어떤 데이터 타입을 사용할까요?

지금부터 알아봅시다 🤩

 

2️⃣ 부동 소수점(Floating-Point Numbers)

 

부동 소수점은 3.14159, 0.1, -273.15와 같이 분수 요소가 포함된 숫자를 말합니다.

그리고 부동 소수점은 정수보다 더 크거나 작은 범위를 숫자를 나타낼 수 있습니다.

 

엥?

소수니까 작은 범위를 나타낼 수 있다는 것은 알겠는데,

어떻게 더 큰 범위도 나타낼 수 있다는거죠?? 😲

(저만 저런 의문이 들었었나요?? ㅎㅎ... 사실 제가 수학이랑 안 친해서 😅)

 

바로바로 부동 소수점은

소수도 가질 수 있지만, 지수도 가질 수 있기 때문이죠!!!

지수를 갖는 예제 코드는 이따가 보도록 하겠습니다.

 

일단, Swift의 부동 소수점에 대해서 더 알아보죠.

 

 

정수에서는 크게  부호가 있는 정수 / 부호가 없는 정수로 나눴지만

부동소수점은 부호가 있는 정수만 취급(?)한답니다.

 

하지만 부동 소수점도 2가지로 나뉘는데요.

Double

Float

입니다.

 

Double은 64bit 부동 소수점을 나타낼 수 있고,

Float는 32bit 부동 소수점을 나타낼 수 있습니다.

 

조금 더 쉽게 풀어쓰면,

Double은 최소 소수점 15자리 정도의 정밀도를 갖는 반면에

Float의 정밀도는 소수점 6자리에 불과할 수 있다는 말입니다.

 

그래도 아직 감이 잘 안 오는걸요? 🤨

뭘 써야 할지 헷갈린다면 그냥 Double 타입을 사용하시면 됩니다!

 

소수가 길던, 작던 Swift에서는 둘 다 Double 타입으로 추론해 주는 것을 볼 수 있네요!

 

공식 문서도 살짝 살펴볼게요. 📄

Double has a precision of at least 15 decimal digits, whereas the precision of Float can be as little as 6 decimal digits. The appropriate floating-point type to use depends on the nature and range of values you need to work with in your code. In situations where either type would be appropriate, Double is preferred.

... 사용할 적절한 부동 소수점의 타입은 코드에서 작업해야 하는 값의 특성과 범위에 따라 다르다.
두 개의 유형 중에 하나가 적합한 상황이라면 Double 타입을 사용하는 것이 선호된다.

precision: 정확성 / appropriate: 적절한 / preferred: 선호하다

 

 

지금까지 정수와 부동소수점을 알아보았습니다.

하지만 한 가지 더 알아두시면 좋을 것이 있습니다.

바로 리. 터. 럴. 입니다!

 

3️⃣ 숫자형 리터럴

 

리터럴(Literal)? 처음 들어봐요!

정의는 코드에서 값을 나타내기 위한 고정된 표기법 입니다.

그냥 어떠한 값 이라고 생각하시면 됩니다.

 

숫자형 리터럴의 예시 코드를 보시면 바로 이해가 되실 겁니다.

// 정수형 리터럴
let someInteger: Int = 123  // 숫자 123 이 정수 리터럴이다.

// 부동 소수점 리터럴
let someDouble: Double = 3.14  // 부동 소수점 3.14 가 부동 소수점 리터럴이다.

 

그래서 리터럴을 왜 알려주냐구요?

리터럴을 통해서 2진수, 8진수, 16진수를 표현할 수 있거든요!! 👏

 

2진수 리터럴(binary)은 접두사로 0b(숫자 0과 영문 소문자 b) 를 붙입니다.

8진수 리터럴(octal)은 접두사로 0o(숫자 0과 영문 소문자 o) 를 붙입니다.

16진수 리터럴(hexadecimal)은 접두사로 0x(숫자 0과 영문 소문자 x)를 붙입니다.

10진수 리터럴(decimal)은 접두사로 아무것도 붙이지 않구요!

// 모두 10진수로 17이다.
let decimalIntger = 17
let someBinaryIntger = 0b10001
let octalInter = 0o21
let hexadecimalInteger = 0x11

 

그리고 부동 소수점의 지수도 표현할 수 있습니다!! 👏👏

 

10진수로 부동 소수점을 나타날 때는 소문자 e로 지수를 표현합니다.

16진수로 부동 소수점을 나타날 때는 소문자 p로 지수를 표현합니다.

// 10진수 부동 소수점
let someExponentDouble: Double = 1.25e2    // 125.0
let otherExponentDouble: Double = 1.25e-2  // 0.0125

// 16진수 부동 소수점
let someHexaDecimalDouble: Double = 0xFp2  // 60.0
let otherHexaDecimalDouble: Double = 0xFp-2 // 3.75

 

마지막으로

숫자형 리터럴은 코드 가독성을 위해 몇 가지 추가적인 포맷이 제공됩니다.

// 정수, 부동 소수점은 추가적인 0으로 채워질 수 있다.
let paddedDouble = 000123.456

// 가독성을 위해 언더바(_)를 넣을 수 있다.
let oneMillion = 1_000_000
let justOverOneMillion = 1_000_000.000_000_1

 

 

 

 

= = = = = = = = = =

 

지금까지 데이터 타입_숫자형에 대해서 알아보았습니다.

사실 위 글들은 다음과 같이 짧게 요약될 수 있습니다.

 

웬만하면

정수는 Int 사용하고,

부동 소수점은 Double 사용합시다.

 

다음 포스팅은 [데이터 타입_문자형] 에 대해 다룰 건데

벌써 기대되시죠!?^^

그럼 다음 포스팅에서 뵙겠습니다 😸

 

긴 글 읽어주셔서 감사합니다. (_ _)

 

 

오탈자나 설명의 틀린 부분, 추가적으로 해주고 싶으신 설명이 있으시다면

주저없이 댓글을 달아주세요. 🙏

'Apple > Swift' 카테고리의 다른 글

[Swift] 제너릭(Generic)  (1) 2024.03.02
[Swift] 데이터 타입_문자형  (1) 2024.02.15
[Swift] 타입 명시와 타입 추론  (0) 2024.01.21
[Swift] 상수와 변수  (2) 2024.01.07
[Swift] 마루의 공부 방법  (0) 2024.01.06