컬렉션 타입이란, 데이터를 묶어서 추가, 삭제 등 관리할 수 있는 타입입니다.
Array, Dictionary, Set 등을 컬렉션 타입이라고 부릅니다.
이번 포스팅에서는 Array에 대해 알아보도록 하겠습니다.
Array
Array는 순서가 보장된 컬렉션 타입이고, 구조체로 되어있습니다.
순서가 보장되었기 때문에 index를 통해서 Array의 Element에도 접근이 가능합니다.
이와 같은 Array를 어떻게 만들까요?
Array 생성
요소가 있는 Array 생성
둘 다 같은 표현이지만, 두 번째 방법이 축약 표현 입니다.
저는 축약된 방식을 주로 사용하고 있고, 대부분 축약 방식을 사용하는 것 같아요.
만약 0이 100개 있는 Array를 생성하고 싶을 땐 어떡할까요?
이것도 간단하게 생성할 수 있습니다.
10개 정도로 줄여서 생성해보겠습니다.
그렇다면.. 0부터 100까지 순서대로 있는 Array를 생성하고 싶다면..?
이것도 바로 샤샥할 수 있습니다.
빈 Array 생성
여러가지 방식이 있네요.
타입을 명시해줬다면 []
만으로도 빈 배열이 생성이 가능합니다.
하지만 타입을 명시해주지 않았다면 Array<Int>(), [Int]()
와 같이 선언해줘야 합니다.
저는 let array: [Int] = []
와 같이 선언하는 것을 선호합니다. ㅎㅎ
Array Property
Array에는 다양한 Property가 존재합니다. 자주 쓰이는 것들만 확인해보시죠.
- isEmpty: Bool
- Array가 비어있는지 여부를 알려주는 Bool 값
- count: Int
- Array의 Element의 갯수
- first: Self.Elements?
- Array의 첫번째 Element
- last: Self.Elements?
- Array의 마지막 Element
first와 last 프로퍼티는 Array가 비어있을 수 있기 때문에 return 타입이 옵셔널입니다.
Element에 접근
Array의 Element 접근하는 방법에 대해 알아보겠습니다.
맨 처음에 Array는 순서가 보장된 컬렉션 타입이라고 언급했습니다.
순서가 있기 때문에, index를 통해서 접근할 수 있습니다.
index는 0부터 시작하기 때문에 첫 번째 요소에 접근하기 위해서는 0번 인덱스에 접근해야합니다.
그렇다면 두번째 요소에 접근하기 위해서는 1번 인덱스에 접근해야겠죠?
짜잔! 잘 접근할 수 있네요.
그렇다면 Array의 크기를 넘어가는 index에 접근을 하면 어떻게 될까요?
범위를 벗어났기 때문에 오류가 나게 됩니다.
앱을 개발하면서 이러한 오류가 나게되면..? 앱이 크래시나서 죽게됩니다.
이러한 오류를 방지하기 위해 safe index를 사용하는 방법이 있습니다!
조만간 정리해서 포스팅 해놓을게요!
또한 var로 선언된 Array라면 Element를 수정하는 것도 가능합니다.
또한 firstIndex(of:)
, lastIndex(of:)
의 인스턴스 메서드를 통해 값을 가지고 index를 알아낼 수 있어요.
- firstIndex(of: Self.Element) -> Self.index?
- element가 첫 번째로 나타나는 인덱스를 반환
- lastIndex(of: Self.Element) -> Self.index?
- element가 마지막으로 나타나는 인덱스를 반환
이 두 인스턴스 메서드도 반환 타입이 옵셔널이네요.
없는 요소에 대한 인덱스를 반환하게되면 nil이 반환되어야 하기 때문입니다.
한 번 둘을 비교해보겠습니다.
firstIndex(of:1)
은 1이 가장 먼저 나타나는 index인 0을 반환 합니다.lastIndex(of:1)
은 1이 가장 마지막에 나타나는 index인 3을 반환 합니다.
Element 추가
Swift의 Array는 크기가 정해져 있지 않습니다.
따라서 Element의 추가가 자유로워요.
Element를 추가할 때는 주로 두 메서드를 사용합니다.
- insert(_ : Element, at: Int)
- at에 위치에 새로운 Element를 추가
- append(Element)
- 가장 마지막 위치에 Element 추가
이 둘도 코드로 비교해보시죠.
insert
메서드를 사용해 0번째 위치에 0을 추가해줬습니다.
그 전에 있던 요소들이 자연스럽게 뒤로 밀어져 들어갔습니다.
append
메서드를 사용해 마지막 위치에 5를 추가했습니다.
또한, 여러개를 한 번에 추가하는 방법도 있습니다.
- insert(contentsOf: [Element], at:)
- 지정된 위치에 Sequence Element를 추가
- append(contentsOf: [Element])
- 가장 마지막 위치에 Sequence Element를 추가
Element 삭제
Element를 추가할 수 있으니 삭제도 할 수 있어야겠죠?
삭제를 하는 메서드는 추가를 하는 메서드보다 조금 더 많습니다.
- remove(at: Int) -> Element
- at에 위치의 Element 제거
- removeFirst() -> Element
- Array의 첫 번째 Element 제거
- removeFirst(Int)
- Array의 첫 번째로 부터 Int개의 Element 제거
- removeLast() -> Element
- Array의 마지막 Element 제거
- removeLast(Int)
- Array의 마지막으로 부터 Int개의 Element 제거
- removeSubrange(Range<Self.index>)
- Array의 범위만큼의 Element 제거
- removeAll()
- Array의 모든 Element 제거
- removeAll(where:)
- where 절을 만족하는 Array의 모든 Element 제거
- popLast() -> Element?
- Array의 마지막 Element를 제거 (옵셔널 반환)
추가보다 메서드들이 참 많네요..
코드로 작성하면서 확인해봅시다.
where절에 쓰인 문법을 처음보실 수도 있지만, 일단은 $0이 각 Array의 요소들이라고 이해하시면 될 것 같아요.
removeLast()
와 popLast()
는 거의 똑같은데 무슨 차이가 있을까요?
removeLast()는 반환 타입이 Element 타입이고, popLast()는 Element?로 옵셔널 타입입니다.
따라서 배열이 비어있을 때, removeLast()를 하게되면, 삭제할 수 없고 반환할 Element가 없기 때문에 오류가 나게 됩니다.
removeFirst, remove(at:)... 등 Element를 반환하는 모든 메서드가 해당됩니다.
하지만 popLast()는 빈 배열일 때, nil을 반환하게 될 것이므로 오류가 나지는 않습니다!
Array Random Element 반환
Array의 요소중에 랜덤한 요소를 뽑아내는 것은 어떻게 할 수 있을까요?
- randomElement() -> Element?
- Array의 랜덤 요소를 반환
엄청 간단합니다!
Array에 대해서는 포스팅을 마치고
다음 포스팅에는 Collection 자료형 중 하나인 Dictionary에 대해 알아보겠습니다.
긴 글 읽어주셔서 감사합니다.
지적 댓글 환영입니다.😄
'Swift 문법' 카테고리의 다른 글
[Swift] 컬렉션 자료형에 대해 알아보자 - 2 (Dictionary) (0) | 2023.01.24 |
---|---|
[Swift] 튜플 (tuple) 에 대해 알아보자! (0) | 2022.12.21 |
[Swift] 기본 자료형에 대해 알아보자! - 4 (Float, Double) (1) | 2022.12.20 |
[Swift] 기본 자료형에 대해 알아보자! - 3 (Any, AnyObject, nil) (0) | 2022.11.19 |
[Swift] 기본 자료형에 대해 알아보자! - 2 (Bool, Character, String) (0) | 2022.11.08 |