스위프트는 서로 관련이 있는 데이터끼리 모아서 관리할 수 있도록 집단 자료형(Collective Types)을 제공합니다. 집단 자료형을 사용하면 데이터를 손쉽게 그룹 단위로 묶을 수 있으므로 다량의 데이터를 다룰 때 무척 편리합니다. 현재 스위프트가 제공하는 집단 자료형은 특징과 성격에 따라 다음 네 가지로 나눌 수 있습니다.
스위프트에서 배열과 집합, 튜플, 그리고 딕셔너리는 어떤 타입의 데이터라도 모두 저장할 수 있지만, 튜플을 제외한 나머지는 저장되는 모든 데이터의 타입이 동일해야 합니다. 하나의 배열 내에서 정수, 문자, 문자열 등 서로 다른 타입의 데이터를 섞어 저장하는 것은 불가능하다는 의미입니다.
배열(Arrays)은 일련의 순서를 가지는 리스트 형식의 값을 저장하는 데에 사용되는 자료형으로, 약간씩의 차이는 있지만 많은 프로그래밍 언어가 공통적으로 제공하는 자료형이기도 합니다. 배열에 입력되는 개별 아이템들은 모두 각각의 순서가 있는데, 이 순서를 일련번호, 즉 인덱스(Index)라고 합니다. 배열에서는 인덱스를 사용하여 배열 내 아이템을 읽어올 수 있습니다. 인덱스는 정수로 이루어지며, 0부터 시작하여 아이템이 추가될 때마다 차례대로 증가하는 것이 특징입니다.
배열에서 인덱스는 순서대로 할당되며, 중간에 값을 생략하거나 건너뛰는 경우는 없습니다. 인덱스에 연결된 아이템이 삭제 되더라도 인접한 다음 아이템들이 차례대로 앞으로 이동하면서 빈 인덱스를 채워 넣습니다. 배열 처음이나 중간에 있는 아이템이 삭제되어도 실제로 사라지는 인덱스는 가장 마지막 인덱스입니다.
이런 특성 때문에 인덱스는 배열의 아이템과 생사고락을 같이하는 고유 코드 역할을 할 수 없습니다. 그저 아이템의 순서를 나타내고, 아이템이 있는 위치를 가리키는 역할만 할 뿐입니다. 중복된 인덱스가 없고 배열의 아이템이 바뀌지 않는 이상 인덱스와 이이템 간의 연결이 바뀌지 않지만, 배열 내에서 아이템을 삭제하면 그 다음 아이템과 연결되므로 사용 시 주의해야 합니다.
스위프트에서 사용하는 배열 자료형은 몇 가지 특징이 있습니다.
[ 정적 방식 배열 정의 ]
[ 아이템1, 아이템2, 아이템3, ... ]
var cities = ["Seoul", "New York", "LA", "Santiago"]
순서가 있는 데이터를 처음부터 마지막까지 차례대로 읽어 들이는 것을 순회 탐색이라고 합니다. 순회 탐색에는 주로 반복문이 사용되는데, 반복문의 특성상 비교적 간단하게 데이터를 순회할 수 있는 방법을 제공하기 때문입니다. 배열 또한 순서가 있는 데이터이므로 반복문을 사용하여 순회 탐색할 수 있습니다.
배열의 순회 특성, 즉 이터레이터를 이용하여 순회 탐색을 합니다.
앞에서 우리는 for ~ in 구문에 순번을 가진 범위 데이터를 넣으면 데이터의 크기만큼 반복 실행되는 특성을 학습했습니다. 이 특성은 배열에도 그대로 적용됩니다. 따라서 for ~ in 구문에 배열 데이터를 직접 넣으면 간편하게 배열을 순회할 수 있습니다.