본문 바로가기
Programming/Swift

[iOS Swift5] Collection, 배열과 딕셔너리, Set 기본

by 개발자 염상진 2024. 1. 11.

안녕하세요. 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 컬렉션은 배열처럼 한 가지 타입을 저장하는 컬렉션이지만 순서를 보장하지 않고, 중복값을 허용하지 않는 특징을 가지고 있습니다. 상황에 맞게 적합한 컬렉션을 사용할 수 있습니다. 

 

🚀️ 도움이 되셨다면 구독좋아요 부탁드립니다 👍️

 

 

 

 

[iOS Swift5] 객체지향 프로그래밍 기초 클래스 프로토콜 익스텐션

Swift는 객체 지향 프로그래밍 언어(Object Oriented Programming)입니다. 그만큼 객체를 사용한 프로그래밍을 지원하고 있다는 말인데요, 객체는 재사용가능한 독립 기능 모듈로 클래스 구조체의 형태로

about-tech.tistory.com

 

 

[iOS Swift5] 열거형 구조체 기본 기초

Swift에서 클래스만큼이나 자주 사용되는 타입이 바로 구조체입니다. 이번 포스팅에서는 클래스와 구조체를 비교하면서 SwiftUI를 활용한 iOS 앱 개발에 필요한 구조체와 열거형의 개념에 대해 간

about-tech.tistory.com

 

 

[iOS Swift5] Objective-C를 넘어선 Swift5 언어의 등장

Swift 5 언어의 출현 현재 애플의 기기에 들어가는 소프트웨어를 개발하기 위해서는 Swift언어를 사용합니다. 애플 에코시스템에서 개발자가 되기 위해서는 Swift 언어를 익혀야 하는데요, Swift 프로

about-tech.tistory.com

 

댓글