배열(Array)
배열(Array)
Swift에서 Array란 무엇인가?
iOS 개발에서 가장 자주 쓰이는 컬렉션 중 하나가 Array
다. 배열은 데이터를 순서대로 저장하고, 인덱스를 통해 접근할 수 있는 자료구조다. Swift의 Array
는 단순한 리스트가 아니다. 타입 안정성, 제네릭, 값 타입 특성을 포함하는 강력한 구조체다.
배열의 기본 정의
1
var names: [String] = ["sangjin", "john", "lucy"]
names[0]
→"sangjin"
- 배열은 0부터 시작하는 인덱스를 가진다.
Array<Element>
로도 표현할 수 있다. (Array<String>
과[String]
은 같다)
배열의 주요 특징
1. 순서가 보장됨
배열은 데이터를 삽입한 순서대로 보관한다. 이는 Stack, Queue와 같은 자료구조 구현에도 활용된다.
2. 값 타입 (Value Type)
Swift의 Array
는 구조체이다. 복사 시 새로운 인스턴스를 만든다.
1
2
3
4
5
6
var a = [1, 2, 3]
var b = a
b[0] = 99
print(a) // [1, 2, 3]
print(b) // [99, 2, 3]
3. 제네릭 기반
어떤 타입이든 배열로 담을 수 있으며, 컴파일 타임에 타입 검사가 이뤄진다.
배열 생성 방법
1
2
3
4
5
6
// 빈 배열 생성
var emptyInts: [Int] = []
var emptyStrings = [String]()
// 기본값으로 채우기
let repeated = Array(repeating: 0, count: 5) // [0, 0, 0, 0, 0]
배열의 주요 메서드
1
2
3
4
5
6
7
8
9
10
11
12
13
var numbers = [1, 2, 3, 4]
// 요소 추가
numbers.append(5)
numbers += [6, 7]
// 요소 삽입
numbers.insert(99, at: 1) // [1, 99, 2, 3, 4, 5, 6, 7]
// 요소 삭제
numbers.remove(at: 2)
numbers.removeLast()
numbers.removeAll()
배열 탐색 & 변형
1
2
3
4
5
let arr = [1, 2, 3, 4, 5]
let even = arr.filter { $0 % 2 == 0 } // [2, 4]
let squared = arr.map { $0 * $0 } // [1, 4, 9, 16, 25]
let sum = arr.reduce(0, +) // 15
배열은 어떤 자료구조 기반인가?
Swift의 Array
는 내부적으로 Contiguous Buffer를 사용한다. 이는 메모리상에 연속된 공간에 데이터를 저장하며, C언어의 배열처럼 빠른 인덱스 접근이 가능하다. 하지만 Swift는 동적 확장, 복사 최적화(Copy-on-Write), 타입 안전성 등을 추가해 일반적인 배열보다 훨씬 강력하게 만든다.
시간 복잡도 정리
연산 | 시간 복잡도 |
---|---|
인덱스 접근 | O(1) |
마지막에 추가 | 암시적 O(1), 가끔 O(n) (재할당 시) |
중간에 삽입/삭제 | O(n) |
검색 | O(n) |
언제 Array를 쓰면 안 되는가?
- 요소의 삽입/삭제가 빈번하고, 위치가 불규칙하다면
LinkedList
가 더 적합할 수 있다. - 중복 없는 요소 저장, 빠른 검색이 필요하면
Set
이나Dictionary
가 적절하다.
마무리
Swift의 Array
는 가장 기본적이면서도 자주 사용되는 컬렉션 타입이다. 값 타입이라는 특성과 제네릭 기반, 고차 함수 지원 덕분에 단순한 리스트 그 이상으로 활용할 수 있다. 배열을 정확히 이해하면 코드의 성능과 가독성을 모두 끌어올릴 수 있다.
This post is licensed under CC BY 4.0 by the author.