🧐 컬렉션타입(Collection type)
컬렉션타입이란 여러개의 데이터를 묶어서 저장하고 관리할 수 있는 자료구조(?)
라고 보면 될 것 같다. Swift에서는 배열(Array), 딕셔너리(Dictionary), 세트(Set) 등을 제공한다.
🤔 튜플(tuple)은 컬렉션타입이 아닌가?
Swift에서 튜플은 Collection type 이 아니다! Swift에서 타입은 크게 named type과 compound type이 존재하는데, named type은 우리가 주로 알고있는 기본타입들 외에도 enum, class, struct와 collection type들이 이에 해닿되고 compund type에는 tuple이 해당된다!
- named types
이름을 가지는 타입(으로생각하자)
그러니까, Swift에서 제공하는 기본자료형(Int, String ...)이외에도 enum, class, struct는 namedType에 속할 수 있다.
(Int, String등의 기본 데이터타입은 struct로 구현되어있기에, 당연히 그럴지도)
- compound types
복합 타입..? (이름이 없는 타입으로 생각하자)
이 compund typed에는 또 1. function type과 2. tuple type으로 구성된다고 합니다.
그러니까 튜플은 컬렉션타입(named type의 일종)이 아니라는 것!
그럼 마저 컬렉션타입 세 종류에 대해 정리해보자.
- Array
같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션타입.
- Dictionary
요소들이 순서 없이 키와 값의(key & value) 쌍으로 구성되는 컬렉션 타입.
- Set
같은 타입의 데이터를 순서 없이 하나의 묶음으로 저장하는 형태의 컬렉션 타입.
수학시간에 배운 집합
과 완전히 일치한다. (합집합, 교집합, 차집합 등을 지원함)
선언은 아래와같이 할 수 있다.
let myArray: Array<Int> = Array<Int>() // 빈 Int형 배열로 초기화
let myArray1: [Int] = [1, 2, 3]
let myArray2: [Int] = [] // 빈 Int형 배열로 초기화
let myDictionary: Dictionary<String: Int> = [String: Int]() // 빈 Dictionary로 초기화
let myDictionary1: [String: Int] = ["JM": 25, "MJ": 26]
let myDictionary2: [String: Int] = [:] // 빈 Dictionary로 초기화
let mySet: Set<Int> = Set<Int>()
let mySet1: Set<Int> = [1, 2, 3]
// [Int] 혹은 [String: Int] 같이 줄여여쓸 수 없음
이 외의 관련 메서드들은 추가적으로 사용하면서 학습해보면 될 것 같다.
✏️ 열거형(Enumerations)
Swift에서는 다른언어(C언어..?)와 다르게 열거형을 아주 유용하게 사용할 수 있다.
열거형의 각 case 그 자체가 하나의 값이 되고, 열거형 자체가 하나의 Type으로 정의되기 때문에 기존에 알던 열거형과는 매우 상이하다.
enum Menu {
case kimbap
case bulgogi
case bibimbap
}
print("오늘의 저녁 메뉴는 \(Menu.kimbap)입니다."
// 오늘의 저녁 메뉴는 kimbap입니다.
위의 코드에서 메뉴는 kimbap, bulgogi, bibimbap 외의 것은 고를 수 없게 되어버렸다.
이렇게 Swift에서 열거형은 사용자에게 선택의 폭을 제한하고 싶을 때
사용하면 유용하다.
예를 들어서 에러처리 할 때 에러의 종류라든지..?
✏️ 열거형의 원시값(Raw value)과 연관값(Associated value)
열거형에는 원시값으로 어떤 값을 저장할 수도 있고, 또 연관값이라는 연관된 값을 지정해둘 수도 있다.
예시를 통해 확인해보자.
enum Number: Int {
case one = 1
case two = 2
case ten = 10
}
print(Number.one.rawValue) // 1
enum MainDish {
case pasta(taste: String)
case chicken(withSauce: Bool)
case rice
}
var dinner: MainDish = MainDish.pasta(taste: "로제")
dinner = .rice
특히 추후에 공부할 Swift의 Optional이라는 개념은 바로 이 열거형의 연관값(Associated Value)로 정의되어있으니, 좀 더 자세히 공부해보면 좋을 것 같다.
'공부 > [iOS&Swift]' 카테고리의 다른 글
[Swift] 스위프트의 클로저(Closure)에 대하여! (0) | 2022.01.11 |
---|---|
[Swift] 연산자 / 조건문 / 반복문 을 간단히 알아보자! (0) | 2022.01.11 |
[Swift] 컬렉션타입 그리고 열거형에 대해 간단하게 알아보자! (0) | 2022.01.11 |
[Swift] print함수의 terminator, separator (0) | 2022.01.05 |
[Swift] 변수와 상수, 기본 자료형 (0) | 2022.01.05 |
댓글