Post

배열(Array)

배열(Array)

Swift에서 Array란 무엇인가?

iOS 개발에서 가장 자주 쓰이는 컬렉션 중 하나가 Array다. 배열은 데이터를 순서대로 저장하고, 인덱스를 통해 접근할 수 있는 자료구조다. Swift의 Array는 단순한 리스트가 아니다. 타입 안정성, 제네릭, 값 타입 특성을 포함하는 강력한 구조체다.

Image


배열의 기본 정의

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.