안녕하세요! 피피아노입니다🎵
이번 포스팅에서는 Swift에서 자주 사용하는 데이터 구조 중 하나인 배열(Array)에 대해 알아보고 Swift 배열의 기본 개념, 생성, 조작 방법, 그리고 고급 기능들에 대해 간단하게 정리해보겠습니다.
그럼 바로 시작하겠습니다.
Swift 배열이란?
배열은 동일한 타입의 값들을 순서대로 저장하는 컬렉션 타입입니다. 배열은 인덱스를 통해 요소에 접근할 수 있으며, 요소의 순서는 배열에 추가된 순서대로 유지됩니다. Swift 배열은 값 타입(value type)으로, 복사 시 독립적으로 동작합니다.
배열의 생성
배열을 생성하는 방법은 여러 가지가 있습니다. 가장 기본적인 방법은 대괄호 []를 사용하는 것입니다.
// 빈 배열 생성
var emptyArray: [Int] = []
// 초기 값이 있는 배열 생성
var numbers: [Int] = [1, 2, 3, 4, 5]
// 타입 추론을 사용한 배열 생성
var fruits = ["Apple", "Banana", "Cherry"]
빈 배열을 생성할 때는 배열의 타입을 명시해야 합니다.
배열의 타입은 Array<Element> 혹은 [Element]로 표기할 수 있습니다.
배열의 조작
요소 추가
배열에 요소를 추가하는 방법은 여러 가지가 있습니다.
var fruits = ["Apple", "Banana"]
// append() 메서드를 사용하여 요소 추가
fruits.append("Cherry")
// += 연산자를 사용하여 여러 요소 추가
fruits += ["Date", "Elderberry"]
요소 접근 및 변경
배열의 요소는 인덱스를 사용하여 접근할 수 있습니다. Swift 배열의 인덱스는 0부터 시작합니다.
var fruits = ["Apple", "Banana", "Cherry"]
// 인덱스를 사용하여 요소 접근
let firstFruit = fruits[0] // "Apple"
// 인덱스를 사용하여 요소 변경
fruits[1] = "Blueberry" // ["Apple", "Blueberry", "Cherry"]
요소 삭제
배열에서 요소를 삭제하는 방법도 다양합니다.
var fruits = ["Apple", "Banana", "Cherry"]
// 인덱스를 사용하여 요소 삭제
fruits.remove(at: 1) // ["Apple", "Cherry"]
// 첫 번째 요소 삭제
fruits.removeFirst() // ["Cherry"]
// 마지막 요소 삭제
fruits.removeLast() // []
// 모든 요소 삭제
fruits.removeAll() // []
배열의 고급 기능
배열의 순회
배열의 모든 요소를 순회하는 방법은 다음과 같습니다.
let fruits = ["Apple", "Banana", "Cherry"]
// for-in 루프를 사용한 순회
for fruit in fruits {
print(fruit)
}
// 인덱스와 함께 순회
for (index, fruit) in fruits.enumerated() {
print("Item \(index + 1): \(fruit)")
}
배열의 정렬
배열의 요소를 정렬하는 방법도 간단합니다.
var numbers = [5, 2, 3, 1, 4]
// 오름차순 정렬
numbers.sort() // [1, 2, 3, 4, 5]
// 내림차순 정렬
numbers.sort(by: >) // [5, 4, 3, 2, 1]
배열의 필터링 및 변형
Swift 배열은 고차 함수(higher-order functions)를 사용하여 필터링과 변형을 쉽게 할 수 있습니다.
let numbers = [1, 2, 3, 4, 5]
// 필터링: 짝수만 추출
let evenNumbers = numbers.filter { $0 % 2 == 0 } // [2, 4]
// 변형: 모든 요소에 2를 곱함
let doubledNumbers = numbers.map { $0 * 2 } // [2, 4, 6, 8, 10]
배열의 성능 최적화
배열은 값 타입이기 때문에, 배열을 수정할 때마다 새로운 배열이 생성됩니다. 그러나 Swift는 내부적으로 복사 지연(Copy-on-Write) 최적화를 사용하여 성능을 최적화합니다. 이는 배열이 수정되지 않는 한, 동일한 메모리를 공유하도록 합니다.
결론
Swift 배열은 매우 유용하고 강력한 데이터 구조입니다. 배열을 사용하면 데이터를 쉽게 저장하고 조작할 수 있으며, 다양한 고급 기능을 통해 효율적인 데이터 처리가 가능합니다. 배열을 잘 활용하면 코드를 더 간결하고 효율적으로 작성할 수 있습니다.
감사합니다.
잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!
궁금하신 부분은 댓글로 질문 부탁드립니다!
'Apple > Swift' 카테고리의 다른 글
[Swift] 고차함수(Higher-order function) 이해하기 (2) | 2024.06.27 |
---|---|
[Swift] Implicitly Unwrapped Optional (암묵적 옵셔널 추출)과 Optional Chaining (옵셔널 체이닝) (0) | 2024.04.11 |
[Swift] 초기화(Initializers) 알아보기 (6) - Failable Initalizers (0) | 2024.02.22 |
[Swift] 초기화(Initializers) 알아보기 (5) - 요구 이니셜라이저 (0) | 2024.02.16 |
[Swift] 초기화(Initializers) 알아보기 (4) - 이니셜라이저의 상속 재정의와 자동 상속 (10) | 2024.02.13 |