티스토리 뷰
[Swift] Data Types(자료형), Boolean, Numbers(숫자), Characters(문자), Strings(문자열)
learner._.Kio 2021. 2. 14. 22:45목차
-
Data Types with Memory
- Data Types
- Memory
- Overflow
-
Numbers
- Number Literals (숫자 리터럴)
- Integer Types
- Signed vs Unsigned
- Int & UInt
- Floating-point Types
-
Boolean
-
Strings and Characters (문자열과 문자)
-
Bool, Int, UInt, Float, Double, Charcter, String 비교
-
Type Inference (형식 추론)
- Type Inference Rules
- Type Annotation (형식 주석)
- Type Safety (형식 안전성)
- Type Conversion (형 변환)
- Type Alias (타입 알리아스)
Data Types with Memory 자료형
몸이 크다면 큰 사이즈, 작다면 작은 사이즈를 입을 것이다. 코드를 통해 처리하는 데이터도 마찬가지다. 큰 데이터는 큰 메모리에, 작은 데이터는 작은 메모리에 저장한다.
Data Types (데이터 형식)
-
Bulit-in Data Type vs Custom Data Type(Class, Struct)
-
Integer Types
-
Floating-point Types
-
Boolean Types
-
Character Types
-
String Types
Memory (메모리)
-
컴퓨터 메모리에는 1과 0으로 저장된다.
- 1 Bit :: 4개
- ex) 1 0
- 1 Byte :: 256개
- ex) 1 0 0 1 0 0 1 0 (-128
127 or 0255)
- ex) 1 0 0 1 0 0 1 0 (-128
- 1 Bit :: 4개
-
2는 저장할 수 없다. 항상 2진수로 바꿔서 저장해야 한다.
-
Sign Bit (사인 비트)
- 0(최상의 bit, Sign Bit) = Positive Number(양수)
- 1(최상의 bit, Sign Bit) = Negative Number(음수)
-
2의 보수 (2's Complement)
- 22 > 00010110(2진수) Bitwise Not > 11101001 + 1 > 11101010
-
1110(Exponent) / 1010(Fraction)
- 실수를 저장할 때는 지수와 가수를 나눠서 저장
- 동일한 메모리 크기에서 정수에 비해 더 넓은 범위를 표현가능
- 부동 소수점 오차로 인해서 100% 정확한 실수를 저장할 수 없다.
Overflow
메모리의 값보다 큰 값을 저장할 때, object-C나 C계열에서는 Overflow를 허용하는데 Swift에서는 오류로 판단.
Numbers
Number Literals (숫자 리터럴)
+123 // '+' 생략가능
-123 // '-' 표기
1.23 // 실수
1.23e4 // 엄청 큰 숫자는 지수로 표현, 10진수 실수
0xAp2 // 16진수 실수
// 엄청 큰 수를 사용하는 게 아니라면 주로 사용은 하지 않음
1_000_000 // 1,000,000 금액을 표시할 때 언더스코어바로 구분가능
10 // 10진수
0b1010 // 2진수 (10진수의 10)
0o12 // 8진수 (10진수의 10)
0xA // 16진수 (10진수의 10)
Integer Types
Int 자료형의 크기 범위 |
---|
Int8 : 1byte |
Int16 : 2byte |
Int32 : 4byte |
Int64 : 8byte |
Int8.min // -128
Int8.max // 127
Int16.min // -32768
Int16.max // 32767
MemoryLayout<Int8>.size // 1byte - 메모리 공간의 크기
MemoryLayout<Int16>.size // 2byte
Signed vs Unsigned
-
정수자료형
| Signed
(양수, 0, 음수) | Unsigned
(양수, 0, 음수저장X) |
| :-: | :-: |
| Int8 | UInt8 |
| Int16 | UInt16 |
| Int32 | UInt32 |
| Int64 | UInt64 |
Int8.max // 127
Int8.min // -128
UInt8.max // 255
UInt8.min // 0
Int & UInt
MemoryLayout<Int>.size // 8byte
Int.min // -9223372036854775808
Int.max // 9223372036854775807
let num = 123 // 지정하지 않으면 기본적으로 Int로 저장됨.
type(of: num)
Floating-point Types
- 실수 자료형
- 정수 자료형보다 항상 큰 값을 저장할 수 있다.
- Int64보다 1/2의 메모리값을 가진 Float이더라도 지수와 가수로 나눠서 저장하기 때문에 더 많은 값을 저장할 수 있다.
- Floating-point Types은 메모리에 따라 소수점의 정확성이 달라진다.
- Float는 소수점 최대 6자리까지 정확성을 보장
- Double은 소수점 최대 15자리까지 정확성을 보장
// 원주율 3.141592653589793238462643383279502884197169
let pie: Float = 3.141592653589793238462643383279502884197169
print(pie)
let pie2 = 3.141592653589793238462643383279502884197169
// 자료형을 직접 지정하지 않으면 모든 실수는 Double로 저장됨.
print(pie) // 3.1415927
print(pie2) // 3.141592653589793
Boolean
참과 거짓을 다루는 Boolean
- 모든 문자를 소문자로 표기
- true와 false로만 사용하며, false 대신 '0' 사용 불가능
let isValid = true
let isValid2: Bool = false // false 대신 '0'사용 불가능
let str = ""
str.isEmpty
if isValid {
}
while !isValid {
}
Strings and Characters (문자열과 문자)
Strings 문자열
하나의 자료를 구성하기 위하여 일련의 문자들의 집합으로 구성된 정보
// 문자열 x Have a nice day
"Have a nice day" // 큰따옴표로 감싸면 문자열
"123" // 큰따옴표 사이에 포함되어 있기 때문에 문자열
"1" // 큰따옴표 사이에 포함되어 있기 때문에 문자열, Swift는 문자열 사이의 문자 수를 상관하지 않는다.
let str = "1"
type(of: str) // String.Type
Characters 문자
하나의 자료를 구성하기 위하여 단 하나의 문자로 구성된 정보
// 하나의 문자로 처리하고 싶다면 Character
let ch: Character = "1"
type(of: ch) // Character.Type
let doubleCh: Character = "AA", 2개이상의 문자를 문자로 저장할 수 없다.
let empthCh: Character = "" // error
let empthCh: Character = " " // Character에 빈문자를 저장하고 싶다면 공백문자로 저장
Bool, Int, UInt, Float, Double, Charcter, String 비교
// Bool
var someBool: Bool = true
someBool = false
// Int
var someInt: Int = -100
// UInt
var someUint: UInt = 100
// someUint = someInt // error
// Float
var someFloat: Float = 3.14
someFloat = 3
// Double
var someDouble: Double = 3.14
someDouble = 3
// someDouble = someFloat // error
// Character
var someCharacter: Character = "@"
// someCharacter = "@@@" // error
// String
var someString: String = "!@#$%^"
someString = someString + "12345"
print(someString) // !@#$%^12345
Type Inference (형식 추론)
자료형을 명시적으로 선언하지 않았다면 초기값을 통해서 알아서 결정
let num = 123
type(of: num) // Int.Type
// Type Inference (형식추론) - 자료형을 명시적으로 선언하지 않았다면 초기값을 통해서 알아서 결정.
let temp = 11.2
type(of: temp) // Double.Type
let str = "Switf"
type(of: str) // String.Type
let a = true
let b = false
type(of: a) // Bool.Type
type(of: b) // Bool.Type
let value /* error - Type annotation missing in pattern
초기값이 없어 자료형 추론 불가능
*/
Type Inference Rules
123 → Int
1.23 → Double
"Hello" → String
true → Bool
false → Bool
Type Annotation (형식 주석)
변수나 상수를 선언할 때 자료형을 표기해주는 문법
let name: Type = value
var name: Type = value
let num: Int = 123
let value: Double // 선언만 하고
value = 12.3 // 여기서 초기화
/*
자료형을 직접 지정하지 않으면 Type Inference를 통해 Int, Double, String으로 지정된다. 다른 자료형으로 지정하고 싶다면 반드시 Type Annotation을 사용한다.
*/
let ch: Character = "c"
/*
Type Inference은 초기값을 기반으로 형식을 추론하기 때문에 compile 시간이 증가한다. 프로젝트 규모가 클수록 compile 시간은 더 증가하고, compile 시간을 단축시키기 위해서 Type Annotation 활용하는 경우도 있다.
*/
Type Safety (형식 안전성)
서로 다른 자료형은 호환할 수 없다.
let str: String = 123
let num: Int = 12.34
/*
문자열에 정수 저장 불가능
값의 성격이 다르기때문에 호환불가능
*/
let a = 7
let b: Int8 = a
/*
a,b 둘다 정수를 저장하는 자료형이지만 메모리의 값이 달라 호환 불가능
*/
let a = 7
let b: Int64 = a
/*
메모리의 값이 갖더라도 자료형의 이름이 다르다면 호환 불가능
*/
let a = 12 // Int
let b = 34.56 // Double
//let result = a + b // error
/*
Binary operator '+' cannot be applied to operands of type 'Int' and 'Double'
계산식의 포함된 모든 숫자의 자료형을 일치시켜야 계산시킬 수 있다.
*/
let rate = 1.94 // Double
let amt = 10_000_000 // Int
//let result = rate * amt // error
let result = rate * Double(amt) // 19400000
Int(rate * Double(amt)) // 19400000
Int(rate) * amt // 10000000
Type Conversion (형 변환)
Type Conversion (형변환) vs Type Casting (형변환)
둘 다 형변환이라고 번역되는 경우가 있다.
- Type Conversion : 메모리에 저장된 값을 다른 형식으로 바꾸어 새로운 값을 생성
- Type Casting : 메모리 저장된 값을 그대로 두고 컴파일러가 다른 형식으로 처리하도록 지시
let a = 123
let b = 4.56
Double(a) + b // 123.0 + 4.56
a + Int(b) // 123 + 4
// Type Conversion
let c = Int8(a)
let d = Int.max
let e = Int8(d) // 큰 error 발생
/*
error: Execution was interrupted, reason: ~
큰 자료형에서 작은 자료형으로 변환할 때는 조심해야 한다.
*/
let str = "123"
let num = Int(str) // 123
let str2 = "number"
let num2 = Int(str) // nil
Type Alias (타입 알리아스)
기본 자료형에 새로운 이름을 추가하는 문법
typealias NewName = TypeName
typealias PinkPatrick = Double
// 별명을 만든다고 생각하면 좋다. 새로운 자료형 X
let lat: PinkPatrick = 12.34
let lon: PinkPatrick = 56.78
/*
let lat: Double = 12.34
let lon: Double = 56.78
typealias는 자주 사용되진 않지만, 활용코드에 따라서는 가독성이 높아질 수 있다.
/*
'Swift' 카테고리의 다른 글
[Swift] Conditional Statements (조건문) (0) | 2021.02.16 |
---|---|
[Swift] Operator (연산자) (0) | 2021.02.14 |
[Swift] Variables(변수), Constants(상수), Naming Convention(명명 규칙), Scope(범위) (0) | 2021.02.13 |
[Swift] 주석, print 함수, dump 함수 (0) | 2021.02.08 |
[Swift] Xcode, Playground 실행 방법 (0) | 2021.02.08 |
- Total
- Today
- Yesterday
- 결합성
- Constants
- playground
- 훈련법
- optional
- 구문이름표
- 옵셔널
- 반복문
- datatypes
- RawValues
- 비트연산자
- continue
- Functions
- enumerations
- iOS View Life Cycle
- 오버플로우연산자
- 전산구문 기초용어
- 객체지향 생활체조
- conditional
- 산술연산자
- 범위연산자
- 오토레이아웃
- scope
- 흐름제어구문
- overflow
- labeled
- 세자리수마다 콤마넣기
- swift
- variables
- 삼항연산자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |