Language/Swift

[Swift Basic] 컬렉션 타입

박땅콩 2022. 7. 24.
728x90

본 내용은 야곰님의 Swift 기본문법 강좌를 듣고 개인적으로 학습하여 정리한 내용입니다. 

 

 

목차

 

  • 컬렉션 타입(Collection Type)
  • 배열(Array)
  • 배열(Array)의 활용
  • 딕셔너리(Dictionary)
  • 딕셔너리(Dictionary)의 활용
  • 세트(Set)
  • 세트(Set)의 활용

 

 

✅  컬렉션 타입(Collection Type)

 

 

컬렉션 타입이란 '데이터들의 집합소'입니다.

지정된 타입들의 묶음이라고 보면 될 것 같습니다.

종류에는 배열(Array), 딕셔너리(Dicitionary), 세트(Set)가 있습니다.

 

 

✅  배열(Array)

 

 

배열같은 타입의 데이터들순서대로 저장하는 리스트입니다.

인덱스 접근가능합니다.

 

먼저 배열(Array)을 선언 및 생성을 해보도록 하겠습니다.

 

import UIKit

var arrayValue : Array<Int> = Array<Int>()
// 같은 표현
// var arrayValue : Array<Int> = [Int]()
// var arrayValue : Array<Int> = []
// var arrayValue : [Int] = Array<Int>()
// var arrayValue : [Int] = [Int]()
// var arrayValue : [Int] = []
// var arrayValue = [Int]()

 

3번째 줄 코드와 5 ~ 10 번째 줄 코드는 같은 표현입니다.

배열(Array)은 여러 리터럴 문법 활용이 가능하여 표현 방법이 다양합니다.

 

 

✅  배열(Array)의 활용

 

배열(Array) 데이터 추가

import UIKit

var integers : Array<Int> = Array<Int>()

// 데이터 추가
integers.append(100)
integers.append(200)
integers.append(300)
print(integers) // 100 200 300 출력
integers += [700]
integers += [800]
print(integers) // 100 200 300 700 800 출력
integers.insert(340, at : 1)
print(integers) // 100 340 200 300 700 800 출력

// integers.append(100.1) // Double, Float type을 넣어주면 에러 발생

 

배열(Array)에 데이터를 추가할 때는 위와 같이 코드를 작성합니다.

append 함수 외에도 += 연산자를 이용해 데이터 추가가 가능합니다.

append와 '+=' 는 배열의 맨뒤에 데이터를 추가하게됩니다.

 

만약 중간에 데이터를 추가하고 싶다면 13번째 줄과 같이 insert(값, at : 위치) 함수를 사용하면 됩니다.

 

그리고 16번째 줄과 같이 지정된 타입 외에 다른 타입의 값을 추가하려 하면 에러가 발생합니다.

 

 

배열(Array) 데이터 삭제

import UIKit

var integers : [Int] = [100, 200, 300, 400, 500]

// 데이터 삭제
integers.remove(at : 0) // 인덱스 0번에 해당하는 데이터 삭제
print(integers) // [200, 300, 400, 500] 출력
integers.removeFirst() // 배열의 첫번째 데이터 삭제
print(integers) // [300, 400, 500] 출력
integers.removeLast() // 배열의 마지막 데이터 삭제
print(integers) // [300, 400] 출력
integers.removeAll() // 배열의 전체 데이터 삭제
print(integers) // [] 출력

 

배열(Array)에 데이터를 삭제할 때는 위와 같이 코드를 작성합니다.

remove 함수를 사용하면 배열의 인덱스를 지정하여 인덱스에 해당하는 데이터를 삭제할 수 있습니다.

removeFirst 함수를 사용하면 배열의 첫번째 데이터를 삭제 할 수 있습니다.

removeLast 함수를 사용하면 배열의 마지막 데이터를 삭제 할 수 있습니다.

removeAll 함수를 사용하면 배열의 전체 데이터를 삭제할 수 있습니다.

 

 

배열(Array) 병합

import UIKit

var student = ["민수", "민지", "진우", "혜수", "동구"]
var student2 = ["재민", "현동", "혜지", "지혜"]

var both = student + student2
// ["민수", "민지", "진우", "혜수", "동구", "재민", "현동", "혜지", "지혜"]

 

+ 연산자를 사용하여 두 배열을 병합할 수 있습니다. 

 

 

배열(Array) 데이터 포함 여부 확인

import UIKit

var integers : [Int] = [1, 2, 3, 4, 5]

integers.contains(1) // true 반환
integers.contains(7) // false 반환

 

배열(Array)에 데이터 포함 여부를 확인하기 위해서는 위와 같이 코드를 작성합니다.

배열에 데이터가 포함되어 있으면 true, 포함되어 있지 않다면 false를 반환힙니다.

 

 

배열(Array) 데이터 갯수 및 비었는지 확인

import UIKit

var integers : [Int] = [1, 5, 3, 7, 8]
// 데이터 개수 확인
print(integers.count) // 5 출력

// 비었는지 확인
print(integers.isEmpty) // true 출력

var emptyValue : [Int] = []
print(emptyValue) // false 출력

 

배열(Array)에 데이터 갯수를 확인하기 위해서는 count 함수를 사용합니다.

데이터 갯수를 반환합니다.

 

배열(Array)이 비었는지 확인하기 위해서는 isEmpty 함수를 사용합니다

비어있다면 true, 비어있지 않다면 false를 반환합니다.

 

 

불변 배열(Array) 

import UIKit

let immutableArray = [1, 2, 3]

// 수정이 불가능한 배열로 데이터를 추가하거나 삭제할 수 없습니다.
// immutableArray.append(3)
// immutableArray.remove(at : 1)

 

let을 사용하여 배열(Array)를 선언하면 변경이 불가능하여 데이터를 추가하거나 삭제할 수 없습니다.

변경하기 위해선 var로 선언해주어야 합니다.

 

 

🚨 주의 🚨

 

import UIKit

var value = [1, 2, 6]
value[0] // 1
value[1] // 2
value[2] // 6

// 존재하지 않는 값 읽기
// value[3] // Error

 

존재하지 않는 값을 읽으려하면 Swift는 충돌합니다.

위 9번째 줄 코드와 같이 작성시 런타임 오류가 발생합니다.

 

 

✅  딕셔너리(Dictionary)

 

 

키(Key)와 값(Value) 쌍으로 이루어진 컬렉션입니다.

배열과 다르게 순서가 없습니다. 그리고 정렬되지 않습니다.

그리고 대괄호로 시작하여 대괄호로 끝나며 각 항목은 쉼표로 구분됩니다.

콜론(:)을 사용하여 키와 값을 구분합니다.

 

그리고 하나의 딕셔너리 안의 키는 같은 이름을 중복해서 사용할 수 없습니다.

즉, 딕셔너리에서의 키는 값을 대변하는 유일한 식별자입니다.

 

그렇다면 딕셔너리(Dictionary) 선언 및 생성을 해보도록 하겠습니다.

 

import UIKit

var anyDictionary : Dictionary<String, Int> = Dictionary<String, Int>()

// 같은 표현
// var anyDictionary : Dictionary<String, Int> = [String : Int]()
// var anyDictionary : Dictionary<String, Int> = [:]
// var anyDictionary : [String : Int] = Dictionary<String : Int>()
// var anyDictionary : [String : Int] = [String : Int]()
// var anyDictionary : [String : Int] = [:]
// var anyDictionary = [String : Int]()

 

3번째 줄 코드와 6 ~ 11 번째 줄 코드는 같은 표현입니다.

딕셔너리(Dictionary)는 여러 리터럴 문법 활용이 가능하여 표현 방법이 다양합니다.

 

 

✅  딕셔너리(Dictionary)의 활용

 

 

딕셔너리(Dictionary) 키에 해당하는 값 추가 및 변경

import UIKit

var anyDictionary : Dictionary<String, Int> = Dictionary<String, Int>()

anyDictionary["first"] = 1
anyDictionary["second"] = 2

print(anyDictionary) // ["first": 1, "second": 2] 출력

anyDictionary["first"] = 10
print(anyDictionary) // ["first": 10, "second": 2] 출력

 

딕셔너리(Dictionary)에 새로운 키 값을 추가할 때는 [새로운 키 값] = value 형태로 추가할 수 있습니다.

그리고 value 값 변경시에도 [기존 키값] = value 형태로 값 변경이 가능합니다.

 

 

딕셔너리(Dictionary) 키에 해당하는 값 삭제

import UIKit

var anyDictionary = ["firstKey": 1, "secondKey": 2, "thirdKey": 3]

anyDictionary.removeValue(forKey: "secondKey")
print(anyDictionary) // ["firstKey": 1, "thirdKey": 3] 출력
anyDicitionary.removeAll()
print(anyDicitonary) // [:] 출력

 

removeValue(forKey: 키) 형태로 삭제가 가능합니다.

그리고 removeAll() 을 사용하여 전체에 대해 삭제가 가능합니다.

 

 

딕셔너리(Dictionary) 데이터 갯수 및 비었는지 확인

import UIKit

var anyDictionary = ["Name": "peanut", "Age": "27"]
print(anyDictionary.count) // 2 출력
print(anyDictionary.isEmpty) // false 출력

 

딕셔너리(Dictionary)의 데이터 개수를 확인하기 위해 count 함수를 사용합니다.

그리고 딕셔너리(Dictionary)가 비었는지 확인하기 위해서는 isEmpty 함수를 사용합니다

비어있다면 true, 비어있지 않다면 false를 반환합니다.

 

 

불변 딕셔너리(Dictionary)

import UIKit

let dictionaryValue = ["red" : 1, "yellow" : 2, "green" : 34]

// 데이터 추가, 삭제(변경) 불가능
// dictionaryValue["blue"] = 7 // Error
// dictionaryValue.removeValue(forKey: "red") // Error

 

let을 사용하여 딕셔너리(Dictionary)를 선언하면 변경이 불가능하여 데이터를 추가하거나 삭제할 수 없습니다.

변경하기 위해선 var로 선언을 해주어야합니다.

 

 

✅  세트(Set)

 

 

세트는 같은 데이터 타입의 값들을 순서 없이 저장하는 리스트 컬렉션입니다

그리고 인덱스 접근이 불가능하고, 자동 정렬되지 않지만 중복된 값허용하지 않습니다.

 

그렇다면 세트(Set) 선언 및 생성을 해보도록 하겠습니다.

 

import UIKit

var setValue : Set<Int> = Set<Int>()
var setK : Set = [1, 2, 3, 4]
var setcollect : Set<String> = ["제로", "모모", "진돌", "삽순"]

 

 

✅  세트(Set)의 활용

 

 

세트 값 추가 및 삭제

import UIKit

var favoriteFruit : Set = ["apple", "banana", "watermelon"]

favoriteFruit.insert("tomato") // 추가
print(favoriteFruit) // ["banana", "apple", "tomato", watermelon"] 출력
favoriteFruit.remove("banana") // 삭제
print(favoriteFruit) // ["watermelon", "apple", "tomato"] 출력
favoriteFruit.removeFirst() // 맨 앞 데이터 삭제
favoriteFruit.removeAll() // 전체 데이터 삭제

 

세트에 데이터를 추가하기 위해서는 insert 함수를 사용합니다.

삭제시에는 remove 함수와 맨 앞 데이터를 삭제하는 removeFirst 함수, 전체 데이터를 삭제하는 removeAll()을  사용합니다.

 

그리고 세트는 중복 값을 허용하지 않기 때문에 insert 시 같은 값을 추가하려하면 무시됩니다.

 

 

세트(Set) 데이터 포함 여부 확인

import UIKit

var setValue : Set<Int> = [1, 2, 3, 4, 5]
print(setValue.contains(7)) // false 반환
print(setValue.contains(2)) // true 반환

 

세트(Set)에 데이터 포함 여부를 확인하기 위해서는 위와 같이 코드를 작성합니다.

세트에 데이터가 포함되어 있으면 true, 포함되어 있지 않다면 false를 반환힙니다.

 

 

세트(Set) 데이터 갯수 및 비었는지 확인

import UIKit

var setValue : Set<Int> = [1, 5, 7, 10, 14]

print(setValue.count) // 5 출력
print(setValue.isEmpty) // false 출력

 

세트(Set)에 데이터 갯수를 확인하기 위해서는 count 함수를 사용합니다.

데이터 갯수를 반환합니다.

 

세트(Set)가 비었는지 확인하기 위해서는 isEmpty 함수를 사용합니다

비어있다면 true, 비어있지 않다면 false를 반환합니다.

 

 

불변 세트(Set)

import UIKit

let t1Value : Set<String> = ["페이커", "제우스", "오너", "구마유시", "케리아"]

// 데이터 추가, 삭제 (변경) 불가능
// t1Value.insert("뱅기") // Error
// t1Value.remove("케리아") // Error

 

let을 사용하여 세트(Set)를 선언하면 변경이 불가능하여 데이터를 추가하거나 삭제할 수 없습니다.

 

 

 

집합연산의 활용

 

세트의 경우 내부의 값이 유일함을 보장하므로 집합관계를 표현할 때 유용하게 쓰일 수 있다고 합니다.

두 세트의 교집합, 합집합, 차집합, 대칭 차집합 연산을 하기에 용이합니다.

또한 sorted() 함수를 통해 정렬된 상태로 반환할 수 있습니다.

 

// set은 집합 연산에 유용
let setA : Set<Int> = [1, 2, 3, 4, 5]
let setB : Set<Int> = [3, 4, 5, 6, 7]

// 합집합
let union : Set<Int> = setA.union(setB)
print(union) // [5, 6, 4, 3, 1, 2, 7]

// 합집합 오름 차순 정렬
let sortedUnion : [Int] = union.sorted()
let arryintvalue : Array<Int> = sortedUnion
print(arryintvalue) // [1, 2, 3, 4, 5, 6, 7]

// 교집합
let intersection : Set<Int> = setA.intersection(setB)
print(intersection) // [3, 5, 4]

// 차집합
let subtracting : Set<Int> = setA.subtracting(setB)
print(subtracting) // [1, 2]

 

아래의 그림 처럼

  • intersection : 교집합
  • union : 합집합
  • subtracting : 차집합
  • symmetricDifference : 대칭차집합

 

The Swift Language Guide 집합 그림

 

 

 

728x90

'Language > Swift' 카테고리의 다른 글

[Swift Basic] 함수 고급  (0) 2022.07.25
[Swift Basic] 함수 기본  (0) 2022.07.25
[Swift Basic] Any, AnyObject, nil  (0) 2022.07.23
[Swift Basic] 기본 데이터 타입  (0) 2022.07.23
[Swift Basic] 상수와 변수  (0) 2022.07.23

댓글