안녕하세요. AboutTech입니다. Swift에서 다양한 데이터와 객체들을 집합체로 묶어 관리할 수 있는 타입을 컬렉션이라고 합니다. 컬렉션 타입에는 대표적으로 배열과 딕셔너리가 있는데요 데이터들을 한 번에 담아서 관리할 수 있는 방법에 대해 알아보도록 하겠습니다.
Swift Array, 배열
배열은 순서있는 컬렉션입니다. 따라서 배열은 다양한 타입의 데이터를 순서대로 저장할 수 있습니다. 먼저 배열을 선언하는 방법은 다음과 같습니다.
var array = [타입]()
String 타입의 값을 담고 있는 배열을 선언하려면 타입에 String을 적어주시면 됩니다.
var array = [String]()
초기값을 N개 가진 배열을 만들기 위해서는 repeating, count 매개변수에 인자를 전달해 주시면 됩니다.
var array = [String](repeating: "example", count: 10)
//["example", "example", "example", "example", "example", "example", "example", "example", "example", "example"]
선언된 배열을 합치기 위해서는 연산자를 사용해 간단하게 배열을 합칠 수 있습니다.
var country1 = ["korea", "japan"]
var country2 = ["USA", "CANADA"]
var totalCountry = country1 + country2
//["korea", "japan", "USA", "CANADA"]
배열에서 자주 사용되는 항목
배열을 선언하고 나면 배열의 길이, 비어있는지 여부, 특정 인덱스에 접근하기 등 다양한 항목을 사용할 수 있는데요 가장 많이 사용되는 항목들을 알아보도록 하겠습니다.
임의의 Int 형 배열을 선언합니다.
var numbers: [Int] = [1,5,11,2,3,8,19,24]
#1 배열 개수
배열의 개수를 확인하기 위해서는 count 항목을 사용할 수 있습니다.
let countNumber = numbers.count // 8
#2 배열 존재여부
배열에 비어있는지 값이 담겨있는지 확인하기 위해서는 isEmpty를 사용합니다.
let isEmpy = numbers.isEmpty // false
#3 배열 특정인덱스
배열은 0번째 인덱스에서 시작합니다. 따라서 2번째 값을 가지기 위해서는 1번 인덱스를 보셔야 합니다.
let secondIndex = numbers[1] // 5
#4 배열 정렬하기
배열에 저장된 값을 정렬하기 위해서는 sort() 항목을 사용합니다.
오름차순으로 정렬하기 위해서는 다음과 같이 sort() 함수를 사용합니다. sort 함수는 매개변수 by를 가지는데요 Bool 타입의 반환 타입을 함수로 받고 있습니다.
// 오름차순
numbers.sort(by: {(num1: Int, num2: Int) -> Bool in
return num1 < num2
})
// 내림차순
numbers.sort(by: {(num1: Int, num2: Int) -> Bool in
return num1 > num2
})
이전에 알아보았던 클로져를 사용하면 더욱 간단하게 사용할 수 있습니다.
// 오름차순
numbers.sort(by: {$0 < $1})
// 내림차순
numbers.sort(by: {$0 > $1})
비교연산자만을 가지고 더 쉽게도 사용가능합니다.
// 오름차순
numbers.sort(by: <)
// 내림차순
numbers.sort(by: >)
#5 항목 무작위로 가져오기
배열의 인덱스를 무작위로 섞기 위해서는 shuffle()을 사용합니다. 원본 배열의 항목들을 무작위로 섞어 버립니다.
numbers.shuffle()
print(numbers) // [5, 8, 19, 1, 2, 24, 3, 11]
원본 배열에 영향을 주지 않으면서 무작위로 섞인 배열을 반환하기 위해서는 shuffled() 항목을 사용할 수 있습니다.
let newNumbers = numbers.shuffled()
print(numbers) //[1, 5, 11, 2, 3, 8, 19, 24]
print(newNumbers) //[3, 11, 19, 5, 8, 1, 2, 24]
#6 새로운 항목 추가하기
기존 배열에 새로운 항목을 추가하기 위해서는 append() 메서드를 사용합니다. 혹은 연산자를 사용해서 항목을 추가할 수도 있습니다.
numbers.append(999)
print(numbers) // [1, 5, 11, 2, 3, 8, 19, 24, 999]
혹은
numbers += [999]
print(numbers) // [1, 5, 11, 2, 3, 8, 19, 24, 999]
append()나 연산자를 사용하면 맨 뒤에 항목이 추가됩니다. 만약 특정 인덱스에 항목을 추가하기 위해서는 insert() 메서드를 사용할 수 있습니다.
numbers.insert(999, at: 1) // 1번째 인덱스에 999를 삽입합니다.
print(numbers) // [1, 999, 5, 11, 2, 3, 8, 19, 24]
Swift Dictionary 컬렉션
배열이 값만 저장하는 컬렉션이라면 딕셔너리는 KEY : VALUE 쌍으로 데이터를 저장합니다. 연관된 값을 참조해서 값에 접근할 수 있습니다.
Swift에서 딕셔너리의 KEY로 사용할 수 있는 데이터 타입에는 String, Int, Double, Bool만 사용할 수 있습니다.
딕셔너리를 선언하는 방법은 다음과 같습니다.
var 딕녀너리 이름 : [키 타입 : 값 타입] = [:]
이를 이용해 빈 딕셔너리를 선언할 수 있습니다. 빈 배열을 선언하는 것과 같은 방식입니다.
var fruitPrices = [String: Double]()
이제 딕셔너리를 사용하는 항목들을 알아보겠습니다. 먼저 String을 키 값으로, Double을 값으로 가지는 임의의 딕셔너리를 선언합니다.
var fruitPrices = ["Apple": 1.99, "Banana": 0.79, "Orange": 1.49, "Grapes": 2.99]
#1 딕셔너리 항목 개수
개수를 알기 위해서는 count 항목을 사용할 수 있습니다. (키:값) 쌍의 개수를 출력합니다.
fruitPrices.count // 4
#2 딕셔너리 항목 접근하기
특정 인덱스의 항목에 접근하기 위해서는 키 값을 가지고 접근할 수 있습니다. 만약 Apple의 값을 출력하기 위해서는 Apple을 참조하면 됩니다.
fruitPrices["Apple"] // 1.99
#3 새로운 항목 추가하기
새로운 키:쌍 항목을 추가하기 위해서는 새로운 키를 참조하는 값을 추가해주면 됩니다.
fruitPrices["Stone"] = 4.14
print(fruitPrices) // ["Stone": 4.14, "Banana": 0.79, "Apple": 1.99, "Orange": 1.49, "Grapes": 2.99]
#4 딕셔너리 항목 출력하기
딕셔너리의 항목들을 출력하기 위해서는 for-in 반복문을 사용할 수 있습니다.
for (key, value) in fruitPrices {
print("Key is \(key) and Value is \(value)")
}
/*
Key is Banana and Value is 0.79
Key is Orange and Value is 1.49
Key is Grapes and Value is 2.99
Key is Apple and Value is 1.99
*/
Swift Set 콜렉션
마지막 컬렉션 타입은 Set입니다. Swift에서 Set은 같은 타입의 데이터를 담는 콜렉션 타입입니다. 다만 배열 처럼 순서가 보장되지 않고, 가장 큰 특징점은 각 항목에 중복된 값을 담지 않는다는 점입니다. 즉 유니크한 값을 다뤄야 할 때 유용하게 사용할 수 있는 콜렉션 타입입니다.
Set을 선언하는 방법은 다음과 같습니다.
var basicSet = Set<Int>()
혹은
var numberSet: Set<Int> = []
Set은 중복값을 허용하지 않기 때문에 다음과 같이 중복된 값을 담은 Set을 선언해도 출력하면 유니크한 값들만 담겨있게 됩니다. 또한 항목의 순서가 보장되지 않습니다.
var numberSet: Set<Int> = [1,1,2,2, 3, 4, 5]
// [1, 2, 3, 5, 4]
그럼 Set의 사용 방법을 알아보도록 하겠습니다. 먼저 Int 형 Set을 선언합니다.
var numberSet: Set<Int> = [1, 2, 3, 4, 5]
#1 새로운 항목 추가하기
Set 컬렉션에 새로운 데이터를 추가하기 위해서는 insert() 항목을 사용합니다.
numberSet.insert(7) //[5, 2, 3, 1, 7, 4]
#2 특정 항목 포함여부 확인
Set에 특정 항목이 포함되었는지 확인할 때는 contains()를 사용합니다.
var numberSet: Set<Int> = [1,1,2,2, 3, 4, 5]
numberSet.contains(7) // false
#3 특정 항목 제거하기
특정 항목을 제거하기 위해서는 remove() 항목을 사용합니다.
var numberSet: Set<Int> = [1,1,2,2, 3, 4, 5]
numberSet.remove(1)
print(numberSet) //[4, 3, 5, 2]
#4 반복문 사용하기
반복문을 사용해서 Set 항목을 순회할 수 있습니다.
var numberSet: Set<Int> = [1,1,2,2, 3, 4, 5]
for number in numberSet {
print("Number : \(number)")
}
/*
Number : 4
Number : 3
Number : 2
Number : 5
Number : 1
*/
Swift 배열, 딕셔너리, Set
Swift에서 데이터를 저장하는 방식은 크게 배열과 딕셔너리로 구분할 수 있습니다. 인덱스만으로 데이터를 특정해야 하는 경우라면 배열을 사용할 수 있습니다. 순서가 보장되고 안전하게 값을 저장할 수 있습니다.
만약 키값을 통해 데이터를 저장해야 하는 경우라면 딕셔너리를 사용할 수 있습니다. 해시 테이블을 사용하는 것처럼 키를 가지고 값을 연결하는 방법으로 효율적으로 데이터를 저장할 수 있지만 순서가 보장되지 않는 단점이 있습니다.
Set 컬렉션은 배열처럼 한 가지 타입을 저장하는 컬렉션이지만 순서를 보장하지 않고, 중복값을 허용하지 않는 특징을 가지고 있습니다. 상황에 맞게 적합한 컬렉션을 사용할 수 있습니다.
🚀️ 도움이 되셨다면 구독과 좋아요 부탁드립니다 👍️
'Programming > Swift' 카테고리의 다른 글
[iOS Swift] 스위프트에서 Error Handling 하는 방법 (0) | 2024.01.15 |
---|---|
[iOS Swift5] 프로퍼티 래퍼 Property Wrapper? (0) | 2024.01.13 |
[iOS Swift5] 열거형 구조체 기본 기초 (0) | 2024.01.10 |
[iOS Swift5] 객체지향 프로그래밍 기초 클래스 프로토콜 익스텐션 (0) | 2024.01.09 |
[iOS Swift5] 함수, 메서드 그리고 클로져 기본 개념 (0) | 2024.01.08 |
댓글