Swift는 어떤 데이터 타입을 지원하나요?
다른 프로그래밍 언어와 크게 다르지 않다.
참/거짓, 정수, 소수, 문자, 문자열, 배열, 딕셔너리, 집합, 튜플 타입을 지원한다.
각 데이터 타입은 변수에 값을 할당하며, 선언을 해줄 수 있다.
또는 선언을 하지 않을 수도 있는데, Swift가 Type Annotation을 통해 타입을 추론할 수 있다.
Swift의 모든 데이터 타입은 첫 글자가 대문자이다.
Boolean - 참, 거짓
Bool은 참, 거짓임을 표현하는 논리 데이터 타입이다.
true, false의 값을 가질 수 있다.
let isVisible : Bool = true
let moreThan30 : Bool = false
Bool 자료형은 특히나 조건문에서 작업할 때 용이하다.
let moreThan30 : Bool = false
if moreThan30 {
print("30보다 큽니다")
} else {
print("30보다 작습니다")
}
// "30보다 작습니다"가 출력된다.
Int - 정수형
정수의 정의는 다음과 같다.
분수 성분이 없는 수 전체를 뜻하며 양수, 0, 음수가 해당한다.
Swift는 부호가 있는지, 없는지에 따라 정수 자료형을 지원한다. (Int, UInt)
또한 8, 16, 32, 64비트 형식의 정수를 제공한다.
기본적으로 Int를 사용하여 선언할 수 있으며, 컴퓨터가 몇 비트를 지원하는지에 따라 다르다.
- 32비트에서는 Int는 Int32와 같다. (-2,147,483,648 ~ 2,147,483,647)
- 64비트에서는 Int는 Int64와 같다. (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
// Int 사용법
let myNumber : Int = 32000
// Int에 소수를 넣으려고 하면 오류가 발생한다.
let myWrongNumber : Int = 30.123
Swift에서는 정해진 크기의 정수가 필요한 게 아닌 이상, 가능한 Int를 사용하기를 권장한다.
이는 코드 일관성, 상호 호환성을 높여준다.
Float, Double - 부동 소수형
부동 소수형은 분수 성분이 있는 수를 뜻한다.
정수보다 넓은 범위의 수를 표현 할 수 있으며, 정수형보다 보다 큰 메모리를 차지한다.
- Float는 32비트 부동 소수형 수를 나타낸다.
- Double은 64비트 부동 소수형 수를 나타낸다.
Double의 정밀도는 최소 소수 15자리이며, float는 소수 6자리까지 지원한다.
상황에 따라 Double과 float를 적절하게 선택하면 좋다.
일반적으로는 Double을 사용한다.
// Float, Double 사용법
let myFloatNumber : Float = 3200000.1
let myDoubleNumber : Double = 3200012312300.1
Character - 문자
Character는 1개의 문자를 의미한다.
Swift는 유니코드9(Unicode)을 사용하고 있어, 해당하는 모든 언어의 문자, 특수문자, 이모티콘을 저장할 수 있다.
심지어 아이폰의 😘같은 문자도 저장이 가능하다.
// Character 사용법
let myCharacter : Character = "A"
let myNumCharacter : Character = "123123" // 오류
String - 문자열
문자열은 말 그대로 문자의 나열이라는 뜻이다.
대부분의 단어, 문장을 나타낼 때는 항상 String을 사용한다고 생각하면 편하다.
마찬가지로 유니코드9을 사용하고 있어, 해당하는 모든 언어의 문자, 특수문자, 이모티콘들을 저장할 수 있다.
// String 사용법
let myStringA : String = "home"
let myStringB : String = "sweet home"
let myStringC : String = "You have to study CS"
let myStringD : String = "425645"
let myStringE : String = "Happy 😍"
String이 1글자일 경우에는 Character로 형 변환이 가능하다.
String이 숫자로만 이루어져 있을 경우에는 숫자 형태로 형 변환이 가능하다.
Array <Element> - 배열
배열은 여러 데이터들을 순서대로 담아 놓은 컬렉션이다.
대괄호([ ])를 이용해 선언할 수 있다.
배열을 선언할 때에는 < > 사이에 데이터 타입을 넣어서 배열의 데이터 타입을 지정할 수 있다.
또한 배열 index를 통해 개별 아이템에 접근할 수 있다.
다른 언어와 비슷하게 첫번째 index는 0부터 시작한다
// 배열 (array<Element>) 사용법
// 다음과 같이 2가지 방법으로 배열을 선언하고 값을 넣을 수 있다.
// 또한 선언한 값에 해당하는 데이터 타입만 들어갈 수 있다.
let myIntArray : array<Int> = [1, 3, 5, 7, 9]
let myStringArray : [String] = ["1", "3", "5", "7", "9"]
let myNumber = myIntArray[1] // myNumber = 3
// 다음은 빈 배열을 선언하는 방법이다.
// 빈 배열을 선언할 때는 반드시 배열의 타입을 명시해야한다.
let myBlankArray1 : [String] = []
let myBlankArray2 = Array<String>()
let myBlankArray3 = [String]()
Dictionary <Key: Value> - 딕셔너리
Dictionary는 키와 값의 쌍을 가지고 있는 컬렉션이다.
Key를 통해 Value에 빠르게 접근할 수 있는 자료형이다.
Key는 고유값으로 구성해야 하며, Value는 상관없다.
- Key를 통해 접근할 때 값이 없으면 nil (null 값)을 반환
- Key를 통해 접근할 때 값이 있으면 해당하는 Value를 반환
배열처럼 딕셔너리의 Key, Value의 데이터 타입을 명시해야한다.
// Dictionary 사용법
let myDictionary : [Int : String] = [1: "One", 2: "Two", 3: "Three"]
myDictionary[1] // "One"
// 비어있는 Dictionary 선언
let emptyDictionary : [String : Int] = [:]
Set <Element> - 집합형
Set은 집합형으로 여러 데이터들을 순서 상관없이 and 중복 없이 담아놓은 컬렉션이다.
Set은 랜덤한 순서를 가지고 있으며, 수학시간에 배운 집합을 생각하면 편하다.
그래서 Set끼리 연산 작업 및 비교가 가능하다.
해시를 통해 값을 저장하기 때문에 배열에 비해서 속도가 빠르다.
저장되는 자료형은 모두 같아야 한다.
// Set 사용법
let mySetA : Set<Int> = [1, 2, 3, 4, 5]
let mySetB : Set<Int> = [3, 4, 5, 6, 7]
// Set 연산
mySetA.intersection(mySetB) // 두 집합의 교집합 [3, 4, 5]
mySetA.union(mySetB) // 두 집합의 합집합 [1, 2, 3, 4, 5, 6, 7]
mySetA.intersection(mySetB) // 두 집합의 여집합 [6, 7]
mySetA.intersection(mySetB) // 두 집합의 차집합 [1, 2]
// 비어있는 Set 생성하기
let myEmptySetA: Set<Int> = []
let myEmptySetB = Set<Int>()
Tuple - 튜플
튜플은 여러 개의 값을 그룹지어 단 하나의 값을 만드는 것이다.
튜플 안의 값은 어떤 타입도 가능하며, 서로 같은 타입이 아니어도 되며, 2개 이상 담을 수도 있다.
배열과 비슷하게 인덱스를 통해 접근이 가능하다. 하지만 정확히 어떤 데이터를 가져오는 것인지 명시되지 않아 코드 가독성이 떨어지는 느낌이 있다.
튜플은 단순한 그룹 값에 용이하며, 복잡한 자료 구조에는 적합하지 않다.
복잡한 자료 구조라면 구조체나 클래스를 사용하자.
// Tuple 사용법
let myTupleA : (String, Int) = ("A", 10000)
let myTupleB = (404, "Not found")
var (code, str) = myTupleB
print("Code: \(code) - \(str)") // "Code: 404 - Not found" 출력
print("Code: \(myTupleB.0) - \(myTupleB.1)") // "Code: 404 - Not found" 출력
'Swift' 카테고리의 다른 글
Swift 문법 노트 1편 - var, let 선언 (0) | 2023.08.08 |
---|