[Swift] 컬렉션 타입 (Array, Dictionary, Set, Tuple)

Kiwi·2024년 2월 26일

Swift

목록 보기
1/21
post-thumbnail

📁 Array

순서가 있는 같은 타입의 컬렉션이다. 흔히 알고 있는 배열의 개념과 같다. 배열은 특정 요소의 인덱스를 사용하여 접근하고 수정할 수 있으며, 배열의 크기는 동적으로 조절된다.

✅ 배열 생성

빈 배열을 생성하는 방법은 다음과 같다.

 var integer: Array<Int> = Array<Int>() //배열 타입 구문
 var integer: Array<Int> = [Int}()
 var integer: Array<Int> = []
 var integer: [Int] = Array<Int>()
 var integers: [Int] = [Int]()
 var integers: [Int] = []
 var integers = [Int]()

배열에 기본값을 지정할 수도 있다. 기본값을 지정하는 방법은 다음과 같다.

var threeDoubles = Array(repeating: 0.0, count: 3) //[0.0, 0.0, 0.0]

✅ 배열 접근과 수정

배열에 제공되는 메서드와 프로퍼티, 서브 스크립트 구문을 사용하여 배열에 접근 및 수정이 가능하다.

  • count 프로퍼티 : 배열의 아이템 갯수를 알 수 있다.
  • isEmpty 프로퍼티 : 값이 0인지 아닌지 판단할 수 있다.
  • append(_:) 메서드 : 배열의 끝에 새로운 아이템을 추가할 수 있다.
  • 덧셈 대입 연산자 : 동등한 타입의 배열은 += 를 통해 추가할 수 있다.
  • [ ] : 배열의 이름 뒤에 바로 대괄호를 붙이고 가져올 값의 인덱스를 넣어 해당 값을 가져올 수 있다.
  • insert(_:at:) 메서드 : 배열의 특정 인덱스에 아이템을 추가할 수 있다.
  • remove(at:) 메서드 : 특정 인덱스의 아이템을 삭제하고 삭제한 아이템을 반환한다.(반환값 무시 가능)
  • removeLast() 메서드 : 배열의 마지막 아이템을 삭제하고 삭제한 아이템을 반환한다.
 integers.append(1)
 integers.append(2)
  
 print(integers) //[1, 2]
  
 print(integers.contains(1)) //true
 print(integers.contains(3)) //false
  
 integers[0] = 0
  
 integers.remove(at: 0)
 integers.removeLast()
 integers.removeAll()
  
 print(integers.count)



📁 Dictionary

딕셔너리는 순서와 상관없이 같은 타입의 키와 같은 탕비의 값의 쌍을 저장하는 컬렉션 타입이다. (키와 값의 타입이 같은 필요는 없다, 또한 Any 타입을 사용하면 값 또는 키 끼리 타입이 같아야 할 필요가 없다) 특정 단어를 찾기위해 사전을 찾는 방법과 같이 식별자를 기준으로 값을 찾을 때 딕셔너리를 사용한다.

✅ 딕셔너리 생성

빈 딕셔너리을 생성하는 방법은 다음과 같다.

var dict: Dictionary<String, Any> = [String: Any]()
var emptyDictionary1: [String: Int] = [:]
var emptyDictionary2 = [String: Int]()

var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"] //타입추론

✅ 딕셔너리 수정과 접근

  • count 프로퍼티
  • isEmpty 프로퍼티
  • [ ] : 적절한 키를 인덱스로 하고 절절한 값의 타입을 할당/변경할 수 있다
  • updateValue(_:forKey:) 메서드 : 특정 키에 값을 설정하거나 업데이트하고, 업데이트 수행 후에 이전 값타입의 옵셔널 값을 반환한다.(업데이트 여부 판별 가능)
  • removeValue(forKey:) 메서드 : 키-값 쌍을 삭제할 수 있다. 이 메서드는 키-값 쌍이 존재하면 삭제하고 삭제된 값을 반환하거나 값이 존재하지 않으면 nil을 반환
dict["a"] = "value"
dict["b"] = 1

print(dict) //["a": "value", "b": 1]

dict["b"] = 2
dict.removeValue(forKey: "b") //2
dict["a"] = nil

print(dict) //[:]



📁 Set

Set은 집합으로 순서와 상관없이 같은 타입의 여러 값들의 콜렉션이다. Set은 순서가 중요하지 않으며, 멤버(요소)가 유일한 것을 보장한다. 멤버가 반복되면 안될 때 배열 대신에 집합을 사용할 수 있다.

✅ 집합 생성

빈 배열을 생성하는 방법은 다음과 같다.

var intSet: Set<Int> = Set<Int>()
var emptySet1 = Set<Int>()
var emptySet2: Set<Int> = []

✅ 집합 접근과 수정

  • count 프로퍼티
  • isEmpty 프로퍼티
  • insert(_:) 메서드 : 집합에 새로운 아이템을 추가
  • remove(_:) 메서드 : 집합의 아이템을 삭제 후 반환. 해당 아이템이 없을 경우 nil을 반환한다.
  • removeAll() 메서드
  • contain(_:) 메서드 : 집합에 특정 아이템이 포함되어 있는지 알 수 있다.
intSet.isEmpty //true

intSet.insert(1)
intSet.insert(2)
intSet.insert(3)
intSet.insert(3)

print(intSet) //[1,2,3]
print(intSet.contains(1)) //true

intSet.remove(2)
intSet.removeFirst()

print(intSet.count) //1

✅ 집합 연산

  • intersection(_:) 메서드 : 두 집합의 공통값(합집합)을 가지는 새로운 집합 생성
  • union(_:) 메서드 : 두 집합의 모든값(공통값)을 가지는 새로운 집합 생성
  • subtracting(_:) 메서드 : 특정 집합의 공통값을 제외한(차집합) 새로운 집합을 생성
  • symmetricDifference(_:) 메서드 : 두 집합의 공통값을 제외한(대칭차집합) 새로운 집합을 생성
let a: Set<Int> = [1,2,3,4,5]
let b: Set<Int> = [3,4,5,6,7]

let union: Set<Int> = a.union(b)
let intersection: Set<Int> = a.intersection(b)
let subtraction: Set<Int> = a.subtracting(b)
let symDif: Set<Int> = a.symmetricDifference(b)
  • isSubset(of:) 메서드 : 집합이 특정 집합에 모든 값이 포함되어 있는지 판단
  • isSuperset(of:) 메서드 : 집합에 특정 집합에 모든 값을 포함하는지 판단
  • isDisjoint(with:) 메서드 : 두 집합이 공통값이 없는지 판단
let houseAnimals: Set = ["🐶", "🐱"]
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
let cityAnimals: Set = ["🐦", "🐭"]

houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true (공통값없음)



📁 Tuple

튜플은 여러 값을 하나의 그룹으로 묶는데 사용되는 데이터 구조이다. 튜플은 서로 다른 또는 동일한 타입의 값을 담을 수 있으며, 한번에 여러 값을 반환하거나 전달하는데 특히 유용하다. 튜플의 요소 개수는 생성 시에 정해지며 이후에는 변경할 수 없다. 그리고 튜플은 배열과 다르게 서로 다른 타입의 요소를 포함할 수 있으나 배열과 마찬가지로 값을 순서대로 저장한다. 그래서 튜플의 요소에 접근할 때는 순서에 따라 접근한다. 또한 필요에 따라 튜플의 각 요소에 이름을 지정할 수 있다.

✅ 튜플 생성

튜플을 생성하는 방법은 다음과 같다.

let myTuple = (1, "hello", true)
let namedTuple = (age: 30, name: "John", isStudent: true)
let typedTuple: (String, Int) = ("Alice", 25)
var emptyTuple = ()
emptyTuple.0 = 10
emptyTuple.1 = "Hello"

✅ 튜플 접근과 수정

  • 튜플에 접근 : 인덱싱을 사용하여 요소에 접근할 수 있다.
emptyTuple.0 = 10
emptyTuple.1 = "Hello"
  • 튜플 분해 : 튜플의 값을 여러 변수에 할당하여 분해할 수 있다.
let (number, greeting, isTrue) = myTuple
  • 함수 반환값으로써의 튜플 : 함수에서 여러 값을 반환할 때 튜플을 사용할 수 있
func getUserInfo() -> (name: String, age: Int) {
    return (name: "Alice", age: 25)
}
profile
🐣 iOS Developer

0개의 댓글