기본적인 데이터 타입들을 공부하고 나면 다음으로 컬렉션 타입 (Collection Type) 을 공부하게 된다.
컬렉션 타입은 보통 프로그래밍 언어마다 거의 비슷하거나 같은 형태를 하고 있다.
그렇기 때문에 하나의 프로그래밍 언어를 익혀서 사용하고 있다면 금방 이해하고 사용하기 쉽다.
컬렉션 타입 (Collection Type)이란?
컬렉션 타입은 데이터들의 집합 이라 할 수 있다.
컬렉션 타입의 이름에서도 알 수 있듯이 Collection 의 뜻 처럼 무리, 모음, 수집 등을 의미하는 것이다.
Swift 에서 컬렉션 타입이란 지정된 타입의 데이터들의 묶음이다.
굳이 지정된 (데이터) 타입이라고 하는 이유는 Swift에서는 컬렉션 타입들이 모두 제네릭 컬렉션 (Generic Collection) 으로 구현되어 있기 때문이다.
그럼 제네릭(Generic)이란 무엇인가?
제네릭이란 컬렉션 타입에 여러가지 데이터 타입들을 담을 수 있도록 지정할 수 있다는 의미이다.
튜플 처럼 하나의 컬렉션 타입에 여러개의 데이터 타입들을 담을 수 있다는 건 아니고 하나의 컬렉션 타입은 하나의 데이터 타입만을 담을 수 있다.
Generic 의 뜻처럼 포괄적인 데이터 타입을 담을 수 있도록 한다는 것 같다.
Swift 에서는 제네릭을 <T> 로 표현하는데 담고싶은 타입을 T 에 넣으면 된다. 자바랑 똑같다. :)
그렇다면 컬렉션 타입은 왜? 필요할까.
여러 이유들이 존재하겠지만 같은 타입의 데이터들을 묶어서 사용하면 우리가 변수와 상수를 선언해서 사용하듯 하나 하나의 데이터들을 굳이 따로 선언해서 사용하지 않아도 되서 효율적이고 편리하기 때문이라 생각한다.
(결국은 개발자 좋으라고...)
Swift에서는 배열(Array), , 세트(set), 딕셔너리 (Dictionary) 세 가지 컬렉션 타입이 있다.
그리고 세 가지 컬렉션 타입은 변수(var) 로 생성하면 컬렉션에 데이터 구성을 변경할 수 있고, 상수(let) 으로 생성하면 데이터 구성을 변경할 수 없다.
배열(Array)
Swift 에서 배열은 같은 데이터 타입의 값들을 순서대로 저장하는 리스트이다.
음식점에서 먼저 온 순서대로 번호와 이름을 적는 대기명단을 생각하면 쉽다.
그리고 배열은 똑같은 값(중복 값) 을 저장할 수 있는데 어차피 순서가 정해져 있어서 구분할 수 있기 때문이다.
대기명단에서도 번호만 다르면 이름이 같더라도 구분되기 때문에 상관없는 것과 똑같다.
그림 1 > 기본적인 배열 사용법
세트(Set)
Swift 에서 세트는 같은 데이터 타입의 값들을 순서없이 저장하는 리스트이다.
순서가 없다는 점만 빼면 배열과 비슷한데, 세트에서는 순서가 없기 때문에 서로 같은 값들을 구분 할 수 없다.
그래서 세트에서는 중복된 값은 허용되지 않는다.
이러한 특징 때문에 스위프트 공식 문서에서도 세트는 순서가 중요하지 않거나, 세트에 저장된 각 값들이 유일한 값일 때
사용하라고 한다.
세트는 로또 번호가 적힌 공들을 담아 놓은 통이라고 생각하면 된다. 통에 들어간 공들은 통에 순서 없이 그냥 담겨있고,
각각 유일한 숫자가 적혀있어 똑같은 공도 없다.
세트는 특별한 기능을 가지고 있는데 바로 우리가 수학시간에 배웠던 집합의 연산을 할 수 있다.
요즘은 다를수 있겠지만 예전엔 다들 집합이 수학책에서 첫 번째 단원 이었기 때문에 바로 이해할거라고 생각한다 :)
(사람들이 공부하기로 결심하면 첫 번째 단원은 하고 포기하기 때문에 첫 번째 단원은 항상 너덜너덜하다는...)
그림 2 > 세트 집합연산 ( 출처 : https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html# )
* 배열과 세트가 비슷해서 주의할 점이 있는데 Swift의 타입추론 기능을 이용해서
[ var 이름 = ["값1","값2"] ] 형태로 사용하면 Swift는 배열로 인식해 버린다. 그렇기 때문에 세트는 축약형이 없다.
그림 3 > 기본적인 세트 사용법
딕셔너리 (Dictionary)
Swift에서 딕셔너리는 순서없이 키(Key) 와 값(Value) 한 쌍으로 데이터를 저장하는 컬렉션 타입이다.
다른 컬렉션 타입과 마찬가지로 딕셔너리의 키(Key)와 값(Value)은 각각 데이터 타입을 지정하면 동일한 데이터 타입만 사용 가능하다.
이름을 잘 붙인것 같은데 이름그대로 사전을 생각해보면 쉽다.
예를들어 영한 사전이라고 하면 영어 단어(Key)를 입력하면 한글로 풀이된 뜻(Value) 가 나오는 것이다. 그리고 영한 사전에서 단어는 영어로만 입력이 가능하고 뜻은 한글로만 나오기 때문에 동일한 데이터 타입만 사용가능한 것과 똑같다.
그림 4 > 딕셔너리 기본 사용법
<그림 1~4> 까지의 예제들은 https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html 에 나와있는
기초적인 예제들만 따라해본 것으로 실제로는 더 많은 기능들과 사용법들이 있다.
굳이 많이 기능들과 사용법들을 찾아보진 않았다. (비효율적인 공부이기 때문에)
개념과 기본적인 사용법만 알고, 실제로 컬렉션 타입을 사용할 때 마다 필요한 기능들을 찾아서 익히면 된다. :)
* 해당 포스팅은 스위프트(Swift)4 버전을 기준으로 하고 있습니다.
* 참고 : https://swift.org/
'IT 정보 로그캣 > Swift' 카테고리의 다른 글
[Swift 공부] 조건문 (0) | 2018.11.10 |
---|---|
[Swift 공부] 기본 연산자 (0) | 2018.11.04 |
[Swift 공부] 튜플(Tuple)이란? (0) | 2018.10.28 |
[Swift 공부]기본 데이터 타입 (자료형) #2 (0) | 2018.10.27 |
[Swift 공부]기본 데이터 타입 (자료형) #1 (0) | 2018.10.21 |