콜렉션 타입 (Collection Types)
Swift에서는 콜렉션 타입으로 배열, 셋, 사전 세 가지를 지원합니다.

콜렉션의 변경

배열, 셋, 사전을 변수(var)에 할당하면 이 콜렉션은 변경가능하고 상수(let)에 할당하면 변경 불가능 합니다.

배열(Array)

배열의 축약형 문법

배열 타입은 Array로 적을 수 있는데 축약형으로 [Element] 형태로 사용할 수도 있습니다.

빈 배열의 생성

아래와 같이 Int형 빈 배열을 생성할 수 있습니다.
1
var someInts = [Int]()
2
print("someInts is of type [Int] with \(someInts.count) items.")
3
// someInts is of type [Int] with 0 items.
Copied!
1
someInts.append(3)
2
// 배열에 3을 추가 했습니다.
3
someInts = []
4
// 배열을 비웠습니다. 배열의 아이템 타입은 그대로 Int로 유지됩니다.
Copied!

기본 값으로 빈 배열 생성

repeating 메소드와 count 메소드를 이용해 기본 값으로 빈 배열을 생성할 수 있습니다.
1
var threeDoubles = Array(repeating: 0.0, count: 3)
2
// threeDoubles : Double 타입의 [0.0, 0.0, 0.0]
Copied!

다른 배열을 추가한 배열의 생성

+ 연산자를 이용해 배열을 합칠 수 있습니다.
1
var anotherThreeDoubles = Array(repeating: 2.5, count: 3)
2
// anotherThreeDoubles : [2.5, 2.5, 2.5]
3
4
var sixDoubles = threeDoubles + anotherThreeDoubles
5
// sixDoubles : [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]
Copied!

리터럴을 이용한 배열의 생성

[value 1, value 2, value 3] 형태를 이용해 배열을 생성할 수 있습니다.
1
var shoppingList: [String] = ["Eggs", "Milk"]
Copied!
더 간단하게 선언할 수도 있습니다.
1
var shoppingList = ["Eggs", "Milk"]
Copied!

배열의 접근 및 변환

배열의 원소 개수 확인
1
print("The shopping list contains \(shoppingList.count) items.")
2
// The shopping list contains 2 items.
Copied!
배열이 비었는지 확인
1
if shoppingList.isEmpty {
2
print("The shopping list is empty.")
3
} else {
4
print("The shopping list is not empty.")
5
}
6
// The shopping list is not empty.
Copied!
배열에 원소 추가
1
shoppingList.append("Four")
2
// shoppingList.count = 3
Copied!
1
shoppingList += ["Baking Powder"]
2
// shoppingList.count = 4
3
shoppingList += ["Chocolate Spread", "Cheese", "Butter"]
4
// shoppingList.count = 7
Copied!
배열의 특정 위치의 원소 접근
1
var firstItem = shoppingList[0]
2
// firstItem : "Eggs"
Copied!
1
shoppingList[4...6] = ["Bananas", "Apples"]
2
// 4, 5, 6번째 인덱스 아이템을 Banana, Apples로 변환
3
// 즉, 아이템 3개가 2개로 줄었다.
Copied!
특정 위치에 원소 추가/삭제/접근
1
shoppingList.insert("Maple Syrup", at:0)
Copied!
1
let mapleSyrup = shoppingList.remove(at: 0)
Copied!
1
firstItem = shoppingList[0]
2
// firstItem : "Six eggs"
Copied!
1
let apples = shoppingList.removeLast()
Copied!

배열의 순회

for-in loop을 이용해 배열을 순회할 수 있습니다.
1
for item in shoppingList {
2
print(item)
3
}
4
// Six eggs
5
// Milk
6
// Flour
7
// Baking Powder
8
// Bananas
Copied!
배열의 값과 인덱스가 필요할 때는 enumerated() 메소드를 사용합니다.
1
for (index, value) in shoppingList.enumerated() {
2
print("Item \(index + 1): \(value)")
3
}
4
// Item 1: Six eggs
5
// Item 2: Milk
6
// Item 3: Flour
7
// Item 4: Baking Powder
8
// Item 5: Bananas
Copied!

셋(Sets)

Set 형태로 저장되기 위해서는 반드시 타입이 hashable이어야만 합니다. Swift에서 String, Int, Double, Bool 같은 기본 타입은 기본적으로 hashable입니다. Swift에서 Set 타입은 Set으로 선언합니다.

빈 Set 생성

1
var letters = Set<Character>()
2
print("letters is of type Set<Character> with \(letters.count) items.")
3
// letters is of type Set<Character> with 0 items.
Copied!
1
letters.insert("a")
2
letters = []
Copied!

배열 리터럴을 이용한 Set 생성

1
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
Copied!
Swift의 타입추론으로 아래와 같이 선언도 가능합니다.
1
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]
Copied!

Set의 접근과 변경

1
print("I have \(favoriteGenres.count) favorite music genres.")
2
// I have 3 favorite music genres.
Copied!
비었는지 확인
1
if favoriteGenres.isEmpty {
2
print("As far as music goes, I'm not picky.")
3
} else {
4
print("I have particular music preferences.")
5
}
6
// I have particular preferences.
Copied!
추가
1
favoriteGenres.insert("Jazz")
Copied!
삭제
1
if let removedGenre = favoriteGenres.remove("Rock") {
2
print("\(removedGenre)? I'm over it.")
3
} else {
4
print("I never much cared for that.")
5
}
6
// Rock? I'm over it.
Copied!
값 확인
1
if favoriteGenres.contains("Funk") {
2
print("I get up on the good foot.")
3
} else {
4
print("It's too funky in here.")
5
}
6
// It's too funky in here.
Copied!

Set의 순회

for-in loop을 이용해 set을 순회할 수 있습니다.
1
for genre in favoriteGenres {
2
print("\(genre)")
3
}
4
// Classical
5
// Hip hop
6
// Jazz
Copied!

Set 명령

1
let oddDigits: Set = [1, 3, 5, 7, 9]
2
let evenDigits: Set = [0, 2, 4, 6, 8]
3
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
4
5
oddDigits.union(evenDigits).sorted()
6
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7
oddDigits.intersection(evenDigits).sorted()
8
// []
9
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
10
// [1, 9]
11
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
12
// [1, 2, 9]
Copied!

Set의 맴버십과 동등 비교

Set의 동등비교와 맴버 여부를 확인하기 위해 각각 == 연산자와 isSuperset(of:), isStrictSubset(of:), isStrictSuperset(of:), isDisjoint(with:) 메소드를 사용합니다.
isDisjoint(with:)는 둘간의 공통값이 없는 경우에 true를 반환합니다.
1
let houseAnimals: Set = ["🐶", "🐱"]
2
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
3
let cityAnimals: Set = ["🐦", "🐭"]
4
5
houseAnimals.isSubset(of: farmAnimals)
6
// 참
7
farmAnimals.isSuperset(of: houseAnimals)
8
// 참
9
farmAnimals.isDisjoint(with: cityAnimals)
10
// 참
Copied!

사전(Dictionaries)

주의 Swift의 Dictionary타입은 Foundation 클래스의 NSDictionary를 bridge한 타입입니다.

축약형 Dictionary

[Key: Value] 형태로 Dictionary를 선언해 사용할 수 있습니다.

빈 Dictionary의 생성

1
var namesOfIntegers = [Int: String]()
Copied!
1
namesOfIntegers[16] = "sixteen"
2
namesOfIntegers = [:]
3
// 빈 사전
Copied!

리터럴를 이용한 Dictionary의 생성

[key 1: value 1, key 2: value 2, key 3: value 3] 형태로 사전을 선언할 수 있습니다.
1
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
Copied!

Dictionary의 접근과 변경

1
print("The airports dictionary contains \(airports.count) items.")
2
// The airports dictionary contains 2 items.
Copied!
빈 Dictionary 확인
1
if airports.isEmpty {
2
print("The airports dictionary is empty.")
3
} else {
4
print("The airports dictionary is not empty.")
5
}
6
// The airports dictionary is not empty.
Copied!
값 할당
1
airports["LHR"] = "London"
2
// the airports dictionary now contains 3 items
Copied!