[Programming Language]/[Swift]

[Swift] 배열(Array), 배열 선언 방법, 추가, 수정, 삭제, count, isEmpty, for ~ in

Semincolon 2024. 7. 5. 01:24

[머릿말]

Swift에도 배열이 존재하는데 다른 프로그래밍 언어에서 보았던 것과 전반적으로 비슷비슷 한 것 같다.


1. 배열(Array)

  배열은 특정 타입의 값을 순서대로 저장한다. 즉, 배열에 저장된 각 값은 각각의 Index 값을 갖는다. 그러므로 중복되는 값도 얼마든지 저장할 수 있다. 

1-1. 배열 선언 방법

  배열은 다양한 방법을 사용하여 선언할 수 있다.

let arr1 = [Int]()  // 가장 많이 사용되는 형식
let arr2: [Int] = []
let arr3: Array<Int> = []
let arr4 = [1, 2, 3, 4, 5]

위 방법을 사용하여 배열을 선언할 수 있고, arr1을 선언하는 방법이 제일 많이 사용되는 방법이다. arr3은 거의 사용되지 않는 방법이다. Swift는 type-safe 하기 때문에 배열에는 같은 타입의 값만 저장할 수 있다. 만약 모든 타입의 값을 저장할 수 있는 배열을 선언하고 싶다면 Any 타입으로 선언해주면 된다.

var arr = [Any]()

arr.append(1)
print(arr)	// [1]

arr.append("ABC")
print(arr)	// [1, "ABC"]


// var arr2 = [1, "ABC"]  -> Error!

 

  배열의 기본 값과 크기를 선언하는 방법도 있다. 기본 값이 될 요소를 repeating에 적고 크기를 count에 적으면 된다.

let arr1 = Array(repeating: 10, count: 3)
let arr2 = Array(repeating: ["A", "B", "C"], count: 2)

print(arr1) // [10, 10, 10]
print(arr2) // [["A", "B", "C"], ["A", "B", "C"]]

1-2. 배열의 병합

1-2-1. + 연산자

+ 연산자를 사용하여 서로 다른 여러 배열을 하나로 합칠 수 있다. 이때 연산에 사용되는 배열들의 타입은 일치해야 한다.

var arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
let arr3 = [7, 8, 9]

arr1 = arr1 + arr2 + arr3
print(arr1) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

1-2-2. append(contentsOf: )

append 메서드를 사용하면 배열의 맨 뒷부분에 새로운 요소를 추가할 수 있다. 이때 contestsOf: 키워드를 사용하면 배열을 추가할 수 있다.

var arr1 = [1, 2, 3]
let arr2 = [4, 5, 6]
let arr3 = [7, 8, 9]

arr1.append(contentsOf: arr2)
print(arr1) // [1, 2, 3, 4, 5, 6]

arr1.append(contentsOf: arr3)
print(arr1) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

1-3. count

count 속성(property)을 사용하면 배열의 길이(요소의 개수)를 확인할 수 있다. 자주 사용되는 속성이다.

var arr1 = [Int]()
var arr2 = [1, 2, 3]

print(arr1.count) // 0
print(arr2.count) // 3

1-4. isEmpty

isEmpty 속성은 배열에 아무런 요소가 없으면 true를, 하나 이상의 요소가 존재하면 false를 반환한다. 이 역시 자주 사용되는 속성이다.

var arr = ["Hello", "Swift"]
print(arr) // ["Hello", "Swift"]
print(arr.isEmpty) // false
print()

arr = []
print(arr) // []
print(arr.isEmpty) // true

1-5. 새로운 요소 추가

1-5-1. append( )

이미 위에서 다룬 것처럼 append() 메서드를 사용하면 배열의 맨 뒷부분에 새로운 요소를 추가할 수 있다.

var arr = [10]

arr.append(20)
print(arr) // [10, 20]

arr.append(contentsOf: [100, 200])
print(arr) // [10, 20, 100, 200]

1-5-2. insert( )

맨 뒷부분에 값이 추가되는 append 메서드와 달리 insert 메서드는 원하는 위치에 값을 추가할 수 있다. 이때 하나의 요소만 추가할 수 있다. 추가할 요소를 앞에 적고, at 키워드에 추가할 인덱스의 번호를 적으면 된다.

var arr = ["A", "B", "C", "D", "E"]

arr.insert("OOO", at: 2)
print(arr) // ["A", "B", "OOO", "C", "D", "E"]

arr.insert("HELLO", at: 0)
print(arr) // ["HELLO", "A", "B", "OOO", "C", "D", "E"]

1-6. 특정 요소에 접근하는 방법

앞서 말한 것처럼 배열은 순서를 갖으므로 각 요소별 인덱스가 존재한다. 이를 사용하여 요소에 접근할 수 있다. 만약 배열의 크기보다 큰 인덱스에 접근하려 하면 오류가 발생한다. Swift에서 배열의 시작 인덱스는 다른 언어와 동일하게 0이다.

var arr = [1, 2, 3, 4, 5]

print(arr[0]) // 1
print(arr[1]) // 2
print(arr[2]) // 3
print(arr[3]) // 4
print(arr[4]) // 5

// print(arr[5]) -> Fatal error: Index out of range

 

범위 연산자를 사용하여 특정 인덱스의 범위에 포함되는 모든 요소에 접근하는 것도 가능하다.

var arr = [1, 2, 3, 4, 5]

print(arr[0...2]) // [1, 2, 3]
print(arr[3..<5]) // [4, 5]

 

이러한 방법을 사용하여 요소의 값을 변경할 수도 있다.

var arr = [1, 2, 3, 4, 5]

arr[2...4] = [0, 0, 0]
print(arr) // [1, 2, 0, 0, 0]

arr[0] = 100
print(arr) // [100, 2, 0, 0, 0]

1-7. 기존 요소의 삭제

1-7-1. remove(at: )

이 방법을 사용하면 특정 인덱스에 해당하는 요소를 삭제할 수 있다.

var arr = [1, 2, 3, 4, 5]

arr.remove(at: 2) // 3 삭제
print(arr) // [1, 2, 4, 5]

1-7-2. removeAll()

전체 요소를 삭제하는 방법이다.

var arr = [1, 2, 3, 4, 5]

arr.removeAll()
print(arr) // []

1-7-3. removeFirst(), removeLast()

각각 배열의 맨 앞 요소맨 뒤 요소를 삭제하는 방법이다.

var arr = [1, 2, 3, 4, 5]

arr.removeFirst()
print(arr) // [2, 3, 4, 5]

arr.removeLast()
print(arr) // [2, 3, 4]

1-7-4. removeSubrange()

특정 범위의 전체 요소를 삭제하는 방법이다.

var arr = [1, 2, 3, 4, 5]

arr.removeSubrange(1...3)
print(arr) // [1, 5]

1-8. for ~ in

for 반복문을 사용하면 배열의 전체 요소를 앞에서부터 하나씩 모두 접근할 수 있다.

var arr = [1, 2, 3, 4, 5]

for item in arr {
    print(item)
}

/*
 1
 2
 3
 4
 5
 */

1-8-1. sorted()

배열의 요소를 오름차순 또는 내림차순으로 정렬하여 하나씩 접근할 수 있다.

var arr = [3, 1, 5, 2, 4]

for item in arr.sorted() { // 오름차순
    print(item, terminator: " ")
}
// 1 2 3 4 5

print()
for item in arr.sorted(by: >) { // 내림차순
    print(item, terminator: " ")
}
// 5 4 3 2 1

1-8-2. enumerated()

이 메서드는 배열의 인덱스와 그에 해당되는 값을 동시에 반환한다. 이때 for (index, value) in 처럼 반복 변수는 튜플 형태로 사용해야 한다.

var arr = [1, 2, 3, 4, 5]

for (i, v) in arr.enumerated() {
    print("index: \(i), value: \(v)")
}

/*
 index: 0, value: 1
 index: 1, value: 2
 index: 2, value: 3
 index: 3, value: 4
 index: 4, value: 5
 */

어느 언어든지간에 배열은 가장 기본이자 핵심이므로 내용을 잘 익혀두도록 해야겠다.

끝!