GGURUPiOS

Swift 공식 문서 정리 - (4) Collection Types 본문

Swift/공식문서 정리 ( 문법 )

Swift 공식 문서 정리 - (4) Collection Types

꾸럽 2023. 4. 19. 15:22

컬렉션 유형 ( Array, Set, Dictionary )

스위프트는 Array, Set, Dictionary 세가지 컬렉션 유형을 제공함

위 컬렉션 유형들은 저장할 수 있는 값 및 키 유형에 대해 항상 명확함

컬렉션의 가변성

변수에 할당하면 변경이 가능함.

상수에 할당하면 변경 불가, 크기 내용 모두 변경 불가.

컬렉션 성능을 위해 변경이 필요없으면 상수로 선언하자.

Array ( 배열 )

동일한 유형의 값을 저장함

배열유형 축약형 문법

배열 타입은 Array로 적을수 있고, [Element]형태로 사용 가능

빈 배열 생성

var someInts: [Int] = [] // 이니셜라이저 구문을 사용하여 만들 수 있음

기본값으로 배열 생성

var threeDoubles = Array(repeating: 0.0, count: 3)
// [0.0, 0.0, 0.0]

두개의 어레이를 함께 추가하여 어레이 만들기

더하기 연산자로 배열 두 개를 함께 추가하여 새 배열을 생성 가능

var anotherThreeDoules = Array(repeating: 2.5, count: 3)
// [2.5, 2.5, 2.5]

var sixDoubles = threeDoubles + anotherThreeDoubles 
// [0.0, 0.0, 0.0, 2.5, 2.5, 2.5]

배열 리터럴로 배열 만들기

var shoppingList: [String] = [”Eggs”, “Milk”]

위와 같이 초기화해서 생성할 수도 있음

위 처럼 초기화 해서 배열을 생성할 때, 스위프트의 타입 추론 때문에 유형을 작성할 필요가 없음

var shoppingList = [”Eggs”, “Milk”]

위와 같이 생성 가능

어레이 접근 및 수정

count 로 항목 수를 확인 할 수 있음

append 를 통해 배열 끝에 새 항목을 추가 할 수 있음

+= 를 통해 하나 이상의 배열을 추가 할 수 있음

index를 통해 배열안의 항목 값에 접근, 수정 가능 함

var shoppingList = [”Eggs”, “Milk”]
// 갯수 확인
shoppingList.count // 2

// 항목 접근, 추가 및 수정 
shoppingList += ["Powder"] // ["Eggs", "Milk", "Powder"]
shoppingList.append("Banana") // ["Eggs", "Milk", "Powder", "Banana"]
shoppingList[0] // "Eggs"
shoppingList[0] = "Two eggs" // shoppingList == ["Two eggs", "Milk", "Powder", "Banana"]
shoppingList[4...6] = ["Apple", "Carrot"] // ["Two eggs", "Milk", "Powder", "Banana", "Apple", "Carrot"]
shoppingList.insert("Maple Syrup", at: 0)

// 항목 삭제 
let mapleSyrup = shoppingList.remove(at: 0)
// remove 메서드는 제거된 항목을 반환 함, 하지만 필요 없다면 무시할 수 있음

주의 할 점은, 범위 밖에있는 인덱스 값에 접근하거나 수정하려고 하면 런타임 오류가 발생함.

index 는 0 부터 시작하고, count 는 1부터 시작하기 때문에 주의 해야함

배열 반복

for-in loop 를 사용해서 배열의 전체 값 집합 반복 가능

각 항목의 정수 인덱스와 값이 필요할 경우 enumerated() 로 접근 가능

for (index, value) in shoppingList.enumerated() {
	print(”\\(index): \\(value)”)
}

SET (셋)

Set은 컬렉션에 동일한 유형의 고유한 값을 저장 함 (중복이 제거된 배열이라 생각하면 될 듯)

Set은 반드시 타입이 hashable 이어야 함

Swift에서 String, Int, Double, Bool 같은 기본 타입은 기본적으로 hashable 임

SET 생성 및 초기화

var letters = Set<Character>()
letters.insert("a")
letters = []

배열 리터럴로 SET 생성

var favoriteGenres: Set<String> = ["Rock", "Classical", "HipHop"]

// 타입 추론이 자동으로 되기 때문에 아래와 같이 선언가능
var favoriteGenres: Set = ["Rock", "classical", "HipHop"]

SET 접근 및 수정

메서드와 프로퍼티를 통해 접근, 수정 가능

count, isEmpty 메서드를 통해 갯수, 빈배열인지 확인 가능

대부분의 메서드가 위에 언급한 Array의 메서드랑 비슷하기 때문에 넘어가도록 하자.

SET 반복

for-in loop 를 사용해서 반복 가능

그러나 주의할점은 Set유형에는 정의된 순서가 없다. sorted() 메서드를 사용해서 정렬해서 사용 가능

SET 명령

메서드를 이용해 두 SET간의 결합에 사용 가능

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]

oddDigits.union(evenDigits).sorted() // 두 세트를 결합 하고 정렬
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted() // 교집합을 가져온 후 정렬
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted() // 빼고 정렬
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted() 
// [1, 2, 9] 교집합을 빼고 합쳐서 정렬

Set의 멤버십과 동등 비교

== 연산자

isSuperset(of:) isStrictSubset(of:) isStrictSuperset(of:) isDisjoint(with:)

등을 사용하여 동등 비교 가능


Dictionaries ( 사전 )

사전은 지정된 순서가 없음. 특정 단어에 대한 정의를 찾기위해 사전을 사용하는 것 처럼, 식별자를 기반으로 찾아야 할 때 사용함.

축약형 Dictionary

[Key: Value] 형태로 선언해서 사용 가능

빈 Dictionary 생성

var namesOfIntegers: [Int: String] = [:]

namesOfIntergers[16] = "sixteen"
namesOfIntergers = [:] // 다시 빈 딕셔너리가 됨.

사전 리터럴로 사전 만들기

var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
var airports: = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
// 타입 추론을 이용해 위와 같이 타입 선언 생략 가능

사전 액세스 및 수정

다른 컬렉션과 마찬가지로 count, isEmpty 등으로 갯수, 비어있는지 여부 확인 가능

접근, 수정 하기 위해서는 airports[Key] 로 가능하다

사전 반복

for (airportCode, airportName) in airports {
	//~~~
}

// 위와같이 각 항목은 (key,value) 튜플로 반환 됨.
// 혹은 key나 value만 반복문을 돌릴 수도 있음 

// 위의 airports 자리에 airports.keys, airports.values 활용