seong_hye, the developer

Swift) 문법 정리 - 컬렉션 타입 (Collection) 본문

IOS

Swift) 문법 정리 - 컬렉션 타입 (Collection)

seong_hye 2022. 7. 12.

 

코드를 쓰다보면 수많은 데이터를 만나게 되고

그 데이터를 하나하나 각자 다 만들어 사용할 수는 없게 되겠죠?

데이터를 효율적으로 관리하기 위한 자료형이 필요한데요

이럴 때 사용하기 위한 것이 바로  컬렉션 타입이에요.


컬렉션 타입이란?

스위프트에서 사용하는 여러 개의 데이터를 한꺼번에 다루는 바구니 타입

예로 인스타그램 게시글, 블로그 글들과 같이 많은 데이터를 다루기 위해 필요한 타입

 

이런 컬렉션은 3가지가 존재함


Array

데이터 값들을 순서대로 저장하는 컬렉션

대괄호([ ])로 묶음 / 각각의 데이터는 요소(index)라고 지칭

 

규칙

- 배열의 인덱스는 0부터 자동으로 순서가 지정됨

- (순서가 있기 때문에) 배열의 데이터는 중복 가능

- 한 개의 배열에는 동일한 데이터 타입만 담을 수 있음

 

사용하는 경우

가장 많이 사용하는 컬렉션으로 실제 프로젝트에서 대부분의 경우

// 빈 배열 생성
let emptyArray1: [Int] = []		// 항상 타입을 작성해야 함
let emptyArray2 = Array<Int>()	      // 생성자를 활용해 생성
let emptyArray3 = [Int]()


let array = [1,2,3,4,5]

//기본 기능
array.count 			// 5 			-> 요소의 갯수를 셈
array.isEmpty   		// false 		-> 요소의 비어있음을 확인
array.contains(5) 		// true			-> 요소가 존재함을 확인
array.randomElement() 		// 3 			-> 해당 배열의 랜덤 요소를 가져옴
array.swapAt(0,1)		// [2,1,3,4,5]		-> 0번과 1번의 요소 위치를 바꿈


//요소의 접근
array[0]			// 1 		-> 0번째 배열에 접근
array.first			//Optional(1)	-> 옵셔널로 첫번째 요소 가져옴
array.last			//Optional(5)	-> 옵셔널로 마지막 요소 가져옴
array.startIndex		// 0		-> 첫번쨰 인덱스 위치 가져옴
array.endIndex			// 5		-> 마지막 인덱스 위치 가져옴(메모리 끝의 주소)
array.fistIndex(of:2)		// 1		-> 앞에서부터 해당 요소가 앞에서 몇번쨰인지(옵셔널타입)
array.endIndex(of:3) 		// 2		-> 뒤에서부터 해당 요소가 앞에서 몇번째인지(옵셔널타입)


// 삽입
array.insert(3, at:4) 				//[1,2,3,4,3,5]	-> 새로운 요소를 해당 위치에 삽입
array.insert(contentsOf:[6,7,8], at:5)
						// [1,2,3,4,5,6,7,8] 새로운 배열을 배열에 추가

//교체
array[3]= 3					// [1,2,3,3,5] 	-> 서브 스크립트 문법 활용
array.replaceSubrange(0..2, with: [5,6,7]
						// [5,6,7,4,5]	-> 인덱스 위치에 원하는 요소로 교체
                        
//추가
array += [6]			//[1,2,3,4,5,6]
array.append(6)			//[1,2,3,4,5,6]

// 삭제
array[0...2] = []		//[4,5]
array.remove(at:2)		//[1,3,4,5]
array.removeAll()		// []

//기타
array.sort()			// 자체 정렬
array.sorted()			// 정렬된 배열 반환
array.reverse()			// 자체 역순정렬
array.reversed()		// 역순 정렬된 배열 반환

Dictionary

데이터를 키와 값으로 하나의 쌍으로 만들어 관리하는 순서가 없는 컬렉션

대괄호로 묶음 ([ ]), 각 요소의 키와 값의 쌍을 콜론(:)으로 처리

 

규칙

- 키 값은 유일해야 함, 밸류값은 중복 가능

- 동일한 타입 쌍의 데이터만 담을 수 있음 ex) [Int:String], [Int:Int]

- 딕셔너리의 값에 딕셔너리 또는 배열을 사용하여서 중첩적으로 사용도 가능

- 딕셔너리의 키 값은 Hashable해야함

*Hashable: 해시함수를 사용해 유일한 값으로 변환이 가능한 티입인지의 여부를 묻는 것

*해쉬 함수: 고정된 길이의 숫자 또는 글자이면서 유일한 값을 반환하는 함수

[ 값의 유일성 보장 / 검색 속도의 빠름]

 

사용하는 경우

서버에 저장되어 있는 데이터를 받아올 때 사용됨

// 빈 배열 생성
let emptyDic1: Dictionary<Int,String> = [:]
let emptyDic2 = Dictionary<Int,String>()
let emptyDic3 = [Int: String]()


let dic = ["1":1, "2":2]

//기본 기능
dic.count 			// 2				-> 요소의 갯수를 셈
dic.isEmpty   			// false 			-> 요소의 비어있음을 확인
dic.randomElement() 		// (key "1",value 1) 		-> 네임드 튜플 형태로 반환


//요소의 접근
dic["1"]			// Optional(1)			-> 옵셔널로 값 반환


// 키/ 값들
dic.keys			// 컬렉션으로 반환
dic.values
dic.keys.sorted()		// 배열로 반환
dic.values.sorted()		
                   
//업데이트 - 삽입/교체/추가
dic["3"] = 3			//동일 키가 있으면 수정, 없으면 추가
dic.updateValue(5, forKey: "2")

// 삭제
dic["2"] = nil
dic.removeValue(forKey: "1)
dic.removeAll()

Set

수학에서의 집합과 비슷한 연산을 제공하는, 순서가 없는 컬렉션

대괄호([ ])로 묶음 / (배열과 구분이 안되기 때문에) 반드시 생성시 타입 선언을 해야 함

 

규칙

- 생성시 타입 선언을 해야함

- 요소 값을 중복으로 넣어도 집합의 의미상 요소 중복 저장안됨

(각 요소는 유일한 값 - Hashable)

 

사용하는 경우

내부적으로 값의 검색에 Hashing 알고리즘을 사용하므로

정렬순서보다 검색속도가 중요한 경우에 사용

또는 유일하면서 집합의 수학적인 개념을 이용할 필요가 있을 때

여러 데이터를 중복 저장할 필요가 없는 경우

// 빈 배열의 경우
let emptySet1: Set<Int> = []
let emptySet2 = Set<Int>()

let set: Set = [1,2,3,4,5]
let set2: Set = [3,4,5]

//기본
set.count
set.isEmpty
set.contains(3)
set.randomElement()


//업데이트 - 삽입/교체/추가
set.update(with:3)


//삭제
set.remove(2)
set.removeAll()


//부분집합/상위집합/서로소
set2.isSubset(of:set) 		//부분집합 여부
set2.isStrictSubset(of:set)	//진부분집합 여부

set.isSuperset(of:set2)		//상위집합 여부
set23.isStrictSuperset(of: set)	//진상위집합 여부


//합집합
set.union(set2)		//합집합 리턴
set.formUnion(set2)	//원래 Set을 변경

//교집합
set.intersection(set2)		//교집합
set.formIntersection(set2)	//원래 Set을변경

//차집합
set.subtracting(set2)		//차집합
set.subtract(set2)		//원래 Set을변경

//대칭차집합
set2.symmetricDifference(set)		//대칭차집합 리턴
set2.formSymmetricDifference(set)	//원래 Set을 변경

참고자료)

https://zrr.kr/qNHN

 

앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정) 강의 - 인프런

Swift문법을 제대로 이해, 활용해보고자 하는 철학을 바탕으로 과정이 설계되었습니다. 코딩에 대해 1도 모르는 비전공자를 시작으로 네카라쿠배에 입사할 수 있는 초고급 수준까지 올리는 것을

www.inflearn.com

 

'IOS' 카테고리의 다른 글

Swift) 문법 정리 - 반복문  (0) 2022.07.12
Swift) 문법 정리 - 조건문  (0) 2022.07.12
Swift) 문법 정리 - 함수  (0) 2022.07.12
Swift ) 문법정리 - 데이터 타입  (0) 2022.07.12
Swift) 문법 정리 - 변수와 상수  (0) 2022.07.12
Comments