iOS/Swift이론

[Swift] array! 배열에 대해 파헤쳐보자!

Sweetft 2022. 12. 28. 16:56

Swift의 컬렉션 타입에는 배열, 딕셔너리, 세트가 있다.

그 중에서 오늘은 배열에 대해 한 번 자세히 알아보고자 한다.

 

배열[array]은 "같은 타입"의 데이터들을 "순서"에 맞춰 저장하는 타입이다.

 

배열의 생성은 다음과 같이 한다.

var array : Array<Int> = Array<Int>()
var array2 : = [Int]()
var array3 : [Int] = []

 

여기서 알아야 할 점!

1. 위 코드와 같이 빈 배열을 생성할 경우에는 배열의 타입을 명시해야 하지만, 값을 넣어서 배열을 만들 경우에는 타입을 명시하지 않아도 된다. 그런 경우는 밑의 코드 처럼 작성한다.

var array = [100, 200, 300]

2. 하나의 배열에는 같은 타입의 데이터들만 있을 수 있다. 고로 밑의 코드는 잘못된 예시이다.

var array [1, 30.0, "apple"]

3. 배열에도 상수형 배열, 변수형 배열이 있다. (let array, var array)

 

 

어려울 것 없는 배열!! 이제 이걸 어떻게 가지고 놀 수 있을까?

 

* array의 요소들을 순서대로 쭈욱 출력하고 싶다면? for in문을 돌리면 된다.

var array = [3,4,10,5]
var num = 1
for elements in array {
    print(num, ":", elements)
    num += 1
}

 

* 앱을 만들다보면, array에 값을 넣어야 하는 일이 굉장히 많이 있는데, 이 때 array에 값이 잘 들어갔는지, array가 빈 값은 아닐 지를 알 고 싶다면? isEmpty 프로퍼티를 사용한다.

var array = [3,4,10,5]

if array.isEmpty {
    print("array가 빈 배열입니다")
} else {
    print(array)
}

-> if는 조건문이 true일 때 실행되는거 다들 아시죠? 즉, isEmpty는 true 혹은 false를 나타냅니다!

 

* 배열의 첫번째 요소와 마지막 요소를 알고 싶을 때는 first, last 프로퍼티를 사용하라!, 이 때 값은 옵셔널이기 때문에 언래핑을 해줘야 한다. 이 때, 만약 배열이 비었을 경우에는 nil을 출력한다

let array = [3,4,10,5]

print(array.first, array.last) //Optional(3), Optional(5)

if let arrayFirst = array.first, let arrayLast = array.last { 
    print(arrayFirst, arrayLast, separator: ", ") //3, 5
}

 

* 배열에 요소를 추가하고 싶을 때 : append

var family = ["mom", "dad"]
family.append("sister")
family.append(contentsOf: ["grandma","grandpa"])
print(family) //["mom", "dad", "sister", "grandma", "grandpa"]

 

* 특정 인덱스에 요소를 추가, 삭제하고 싶을 때, insert, remove - 꼭 필요한 경우가 아니라면 insert 보다는 append를 사용하자

var numbers = [3,4,0,10,60]
numbers.insert(100, at: 4)//[3, 4, 0, 10, 100, 60]
numbers.remove(at: 3)//[4, 0, 10, 100, 60]
numbers.removeFirst() //[4, 0, 100, 60]

 

* 배열의 요소를 검색하고 싶다면? contains 메서드로 해당 값이 배열의 요소 중에 있는지 확인이 가능하다!

var numbers = [3,4,0,10,60]
numbers.contains(10) //true
numbers.contains(2) //false

 

* 배열을 오름차순, 내림차순 정렬하고 싶을 때는? sort(), sorted()를 기억하자!

var numbers = [3,4,0,10,60]
numbers.sort() //[0, 3, 4, 10, 60]
numbers.sort(by:>) //[60, 10, 4, 3, 0]

sort는 바로 배열에 사용해주면 오름차순, 내림차순으로 정렬된 배열을 확인할 수 있다.

하지만 같은 방법으로 sorted를 사용하고 numbers를 출력하면 값이 변경되지 않는다.

그 이유는 바로, sort는 원본 데이터를 변경하는 것이고 sorted는 정렬된 새로운 배열을 리턴하기 때문이다.

즉, numbers.sorted()를 하고 그대로 numbers를 출력하면 원본이 유지가 된다. 그렇기 때문에 이를 사용하고 싶다면 새로운 변수(상수) 배열에 이 값을 저장해서 사용하여야 한다.

var numbers = [3,4,0,10,60]
var newNumbers = numbers.sorted()
print(newNumbers)

 

* 배열을 무작위로 섞고 싶을 때는 shuffle()을 기억하자! 여담이지만 예전에 이게 시험에 나왔는데 기억이 안나서 array.random()이라고 적은 흑역사가 있다 ( ... )

var numbers = [3,4,0,10,60]
numbers.shuffle() //[4, 60, 10, 0, 3]

 

* 배열의 길이를 알고 싶을 때는 count 프로퍼티가 있다. 예시 생략

 

* 어떤 데이터가 배열의 몇 번 째 인덱스에 처음/마지막에 있는 지 알고 싶을 때! firstIndex(of:), lastIndex(of:) 메서드가 있다.

var numbers = [3,4,0,10,60,50,4,4]
numbers.firstIndex(of:4) //Optional(1)
numbers.lastIndex(of:4) //Optional(7)

 

 

해당 글은 배열에 관해 제가 더 적고 싶은 내용이 생길 때 더 수정해가겠습니다 😊

'iOS > Swift이론' 카테고리의 다른 글

Swift의 고차함수에 대해 알아보자. (Map,Filter,Reduce)  (0) 2023.01.15
Swift의 비동기 처리  (2) 2023.01.08
UIKit  (0) 2022.05.23
Swift) 열거형 enum  (2) 2022.04.19
Swift) 프로토콜과 델리게이트 Protocol, Delegate  (1) 2022.04.12