swift의 collection에 대해서 알아보자
1)
collection은 값(value)들의 묶음을 의미한다.
swift에서 collection은 Array, Dictionary, Set 으로 총 세 가지 타입이 있다.
Array 는 '배열'이라고도 하는데 값들을 순서대로 저장하는 collection이고
Dictionary 은 사전처럼 키와 값을 하나의 쌍으로 묶어서 저장해주는 collection 이며
Set 은 집합연산을 제공하는 collection이다.
2)
Swift 이전에 Objective-c 에서 사용하던 collection은 class로 구성 되었으며 따라서 참조형식이었다. 이를 Foundation Collection 이라 한다.
Swift 에서는 collection이 구조체(struct)로 되어있으며 Swift Collections 이라 부른다.
일반적으로는 Swift Collecton이 사용되며 collection을 참조형식으로 써야할 때 제한적으로 Foundation Collection이 사용된다.
Foundation Collection 의 타입 이름들은 NSArray, NSDictionary, NSSet 으로 Swift Collection 에서 접두에 'NS' 만 붙여주면 된다.
3)
Foundation Collection에는 객체(Object) 만 저장 가능하다. 때문에 Int 타입등의 숫자등을 저장하기 위해선 NSNumber, NSValue등으로 객체화를 한 후 저장해야한다.
반면에 Swift Collection에는 이러한 제약없이 객체(Object)와 값(Value) 모두가 저장 가능하다.
다만 Swift Collection에는 하나의 Type 만 저장이 가능하다 만약 Int 타입을 저장하는 collection이라면 Int 타입만 저장이 가능하다. 그러나 Foundation Collection은 이러한 타입에 대한 제한이 없다.
4)
Collection에 저장하는 개별 데이터들은 Element 라고 부르며 한글로 요소라고 부른다.
5)
Collection엔 불변(let) Collection과 가변(var) Collection이 있는데 let으로 선언된 collection은 불변하며 변경할 수 없고, var로 선언된 collection은 가변 컬렉션으로서 변경이 가능하다.
단 collection의 가변성이 요소(element)의 가변성에 영향을 주는 건 아니며 요소의 가변성은 해당 요소의 가변성에 영향을 받는다.
6)
Swift Collection은 구조체의 값형식으로서 값형식은 값을 사용할때 마다 복사되는 형식이다. Swift는 Copy-on-write 이라는 방식으로 Collection을 최적화한다. 이는 요소에 접근할 때는 복사없이 원본에 접근하며 Collection을 변결할 때에만 복사되는 방식이다.