티스토리 뷰
Swift 의 기본적인 Data Types 에 대해 알아보겠습니다.
1. Data Types
자료형은 메모리에 저장되는 데이터의 종류와 크기를 지정합니다.
Swift 에 내장되어 있는 자료형(Built-in Data Type)의 종류는 다음과 같습니다.
- Integer Types: 정수
- Floating-point Types: 실수
- Boolean Types: 참, 거짓
- Character Types: 하나의 문자
- String Types: 하나 이상의 문자 (문자열)
데이터를 저장하는 공간인 Memory 에 대해 간단하게 알아보겠습니다.
Memory 는 1과 0을 저장할 수 있는 저장 공간을 가진 반도체를 말합니다.
저장단위의 가장 작은 단위는 Bit 입니다. Bit 는 0, 1을 저장할 수 있으며 정보의 기본 단위가 됩니다.
이런 Bit 가 8개 모이면 Byte 라고 합니다. (1Byte = 8Bit)
Byte 는 음수, 양수 모두 저장한다면 -128 ~ 127까지, 양수만 저장하면 0 ~ 255까지 저장 가능합니다.
예를 들어 22를 저장한다고 하면 2진수로 바꾸어 00010110이 저장됩니다.
이때 가장 왼쪽 비트를 MSB(Most Significant Bit) - 최상위 비트라고 하고, 가장 오른쪽 비트를 LSB(Least Significant Bit) - 최하위 비트라고 합니다. 전체 비트는 Data Bit 라고 합니다.
숫자 저장 자료형은 음수 저장 여부에 따라 2가지로 나눠집니다.
- Signed 자료형: 음수, 0, 양수를 저장
- UnSigned 자료형: 0, 양수를 저장
Signed 자료형의 경우 최상위 비트로 양수, 음수를 구분하며 저장되는 방법을 간단히 보면 아래와 같습니다.
- 최상위 비트 0: 양수
- 최상위 비트 1: 음수
- 22 -> 00010110 -> Bitwise NOT 연산 수행 -> 11101001 -> + 1 -> 11101010 (-22)
실수 저장의 경우는 아래와 같은 특징이 있다는 것만 알고 우선 넘어가겠습니다.
- 실수 저장은 지수와 가수를 나눠서 저장한다.
- 동일한 메모리 크기에서 정수에 비해 더 넓은 범위를 표현할 수 있다.
- 부동 소수점 오차로 인해서 100% 정확한 실수를 저장할 수 없다.
2. Numbers
Swift 에서 숫자 타입은 정수(Integer)와 실수(Floating-point)가 있습니다.
123
+123 // 양수 표시 (+ 생략 가능)
-123 // 음수 표시 (- 생략 불가)
0.23 // 실수 표시 (0 생략 불가)
1.23e4 // 지수 표현 (10진수)
0xAp2 // 지수 표현 (16진수)
1_000_000 // 금액을 처리하는 표현
10 // 10진수 10
0b1010 // 2진수 10
0o12 // 8진수 10
0xA // 16진수 10
/*
# Integer Types
*/
// Int8
// Int16
// Int32
// Int64: 64bit 로 8byte 저장 가능
// 저장할 수 있는 값 범위 확인
Int8.min // 결과: -128
Int8.max // 결과: 127
// 메모리 크기 확인 (byte 크기 반환)
MemoryLayout<Int8>.size // 결과: 1
// Signed vs Unsigned
// Signed: Int8, Int16, Int32, Int64
// Unsigned: UInt8, UInt16, UInt32, UInt64
UInt8.min // 결과: 0
UInt8.max // 결과: 255
// Int vs UInt
// 대부분 Int 를 사용하는데 가장 빠르게 정수를 처리할 수 있기 때문
MemoryLayout<Int>.size // 결과: 8
Int.min // 결과: -9223372036854775808
Int.max // 결과: 9223372036854775807
let num = 123
type(of: num) // 결과: Int.Type
/*
# Floating-point Types
*/
// Float: 4byte
// Double: 8byte
// 음수, 0 양수 다 저장됨
// 정수보다 큰 값을 저장할 수 있음 (지수와 가수를 나눠서 저장하기 때문)
// 메모리 크기에 따라 소수점 위치가 결정되어 오차가 발생할 수 있음
// 최대 소수점 6자리까지 보장 (그 이후는 오차 가능성 있음, 메모리에는 모두 저장됨)
let pi: Float = 3.141592653589793238462643383279502884197169
print(pi) // 결과: 3.1415927
// type 지정을 안하면 그냥 Double
// 최대 15자리 소수점 보장
let pi = 3.141592653589793238462643383279502884197169
print(pi) // 결과: 3.141592653589793
3. Boolean
"참" 과 "거짓" 을 나타내는 데이터 타입을 말합니다.
let valid: Bool = true // 참: true, 거짓: false
// let valid: Bool = 0 - 에러
// Boolean 타입의 변수는 has, is 같은 접두어를 주로 붙임
let isValid: Bool = true
let str = ""
str.isEmpty // 결과: true
// 조건을 판단하는 코드에서 주로 사용됨
if isValid {
}
while !isValid {
}
4. String and Character
/*
# String
*/
// Swift 에서 문자열은 "" 로 묶여 있음
"Have a nice day"
"123" // 숫자로 구성되어도 "" 로 묶여 있어 문자열
"1" // 하나의 문자라고 해도 "" 로 묶여 있으면 문자열
let str = "1"
type(of: str) // 결과: String.Type
/*
# Character
*/
// Swift 에서 하나의 문자는 반드시 타입 지정을 해줘야 함
let ch: Character = "1"
type(of: ch) // 결과: Character.Type
// Character 문자 타입에는 하나의 문자만 저장할 수 있음
// let doubleCh: Character = "AA" - 에러
// Character 에 빈 문자를 저장하고 싶다면 빈 공백을 넣어야 함
let emptyCh: Character = " "
5. Type Inference
자료형을 지정하지 않았다면 초기값을 통해 해당 변수(또는 상수)의 타입을 지정하게 되는데 이를, 타입 추론(Type Inference)라고 합니다.
/*
# Type Inference
*/
let num = 123
type(of: num) // 결과: Int.Type
let temp = 11.2
type(of: temp) // 결과: Double.Type
let str = "Swift"
type(of: str) // 결과: String.Type
let a = true
let b = false
type(of: a) // 결과: Bool.Type
type(of: b) // 결과: Bool.Type
/*
# Type Annotation
*/
// 자료형을 직접 지정하는 것을 의미함
// let name: Type = value
// var name: Type = value
let n: Int = 123
let value: Double
value = 12.3
let ch: Character = "c"
// 타입 추론을 하면 컴파일 시간이 길어지기 때문에 타입 annotation 을 사용하는 경우가 많음
6. Type Safety
/*
# Type Safety
*/
// 엄격한 구분
// let str: String = 123 - 에러
// let num: Int = 12.34 - 에러
// 같은 타입이라도 저장공간 크기가 다르면 에러
//let a = 7
//let b: Int8 = a
// 자료형의 이름이 다르면 무조건 호환되지 않음
//let a = 7
//let b: Int64 = a
let a = 12
let b = 34.56
// 계산식에 포함된 데이터의 자료형이 같을 때만 계산이 가능
// let result = a + b
let rate = 1.94
let amount = 10_000_000
let result = rate * Double(amount)
type(of: result)
Int(rate * Double(amount))
Int(rate) * amount
7. Type Conversion
/*
# Type Conversion
*/
// Type Conversion: 메모리에 저장된 값을 다른 형식으로 바꿔 새로운 값을 생성
// Type Casting: 메모리에 저장된 값을 그대로 두고 컴파일러가 다른 형식으로 처리하도록 함
// Type(value)
let c = 123
let d = 4.56
Double(c) + d // 123.0 + 4.56
c + Int(d) // 123 + 4
let e = Int8(c)
let f = Int.max
// Fatal error: Not enough bits to represent the passed value
// let g = Int8(f)
var str = "123"
var number = Int(str)
str = "number"
number = Int(str) // Type Conversion 실패 시 nil 이 반환됨
/*
# Type Alias
*/
// 기본 자료형에 새로운 이름(별명)을 추가하는 문법
// typealias NewName = TypeName
typealias Coordinate = Double
let lat: Coordinate = 12.34
let lon: Coordinate = 56.78
지금까지 Swift 의 기본적인 Data Type 에 대해 알아보았습니다.
'swift > 문법' 카테고리의 다른 글
05. Swift 문법 - Loop Statements (0) | 2020.10.11 |
---|---|
04. Swift 문법 - Conditional Statements (0) | 2020.10.11 |
03. Swift 문법 - Operators (0) | 2020.10.10 |
01. Swift 문법 - Variables and Constants, Scope (0) | 2020.10.08 |
00. Swift 문법 - Token, Expressions, Statements 등 기초 지식 (0) | 2020.10.08 |
- Total
- Today
- Yesterday
- 순열
- cloudfront
- 프로그래머스
- map
- java
- SWIFT
- search
- ECR
- EC2
- CodeDeploy
- AWS
- 수학
- spring
- Combination
- CodeCommit
- CodePipeline
- array
- programmers
- sort
- Algorithm
- BFS
- permutation
- 조합
- 에라토스테네스의 체
- 소수
- Dynamic Programming
- DFS
- ionic
- Baekjoon
- string
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |