iOS/Swift

[Swift] 컬렉션 타입 : Dictionary 기초

하노 Hano 2022. 3. 21. 17:31

안녕하세요. 하노입니다 :)

컬렉션 타입에는 총 3가지 종류가 있습니다.

  • Array - 순서가 있는 리스트 컬렉션
  • Dictionary - 키(Key)와 값(Value)이 쌍으로 이루어진 컬렉션
  • Set - 순서가 없고 멤버가 유일한 컬렉션

이 중에서 Array는 지난 번 다뤘었고, 오늘은 Dictonary에 대해 알아보겠습니다.

(Array 기초편: https://glsman-111co.tistory.com/3)

(Array 메서드편: https://glsman-111co.tistory.com/4)


Dictionary 생성

 

우선 생성 코드를 보기 전에 Dictionary의 특성에 대하여 알아보겠습니다.

 

Dictionary는 Array와 다르게 키(Key)와 값(Value)이 한 쌍으로 이루어진 타입입니다.

 

따라서, Dictionary를 선언할 때에는

키(Key)와 값(value)의 타입을 모두 명시해 주어야 합니다!

 

이 점을 생각하면서 Dictonary의 생성 코드에 대해 알아보겠습니다.

 

// Dictionary Create
var integers: Dictionary<String, Int> = Dictionary<String, Int>()
var integers: Dictionary<String, Int> = [String: Int]()
var integers: Dictionary<String, Int> = [:]
var integers: [String: Int] = Dictionary<String, Int>()
var integers: [String: Int] = [String: Int]()
var integers = [String: Int]()
var integers: [String: Int] = [:]

 

위의 코드들로 Dictionary 타입을 생성할 수 있습니다.

 

앞서 Dictionary를 생성할 때는 키(Key)와 값(Value)를

 

위에 코드에서 상황에 따라 다르지만, 제가 주로 사용하는 방법은 제일 마지막 방법입니다.

이유는 그저 간결해서 보기 편하더라구요...ㅎㅎ

 

 

또한, 스위프트는 강력한 타입 추론(Type Inference)를 가지고 있기 때문에

 

var integers = ["하나": 1]	// [String, Int]

 

위의 코드처럼 타입을 선언하지 않고 바로 값을 넣어주는 방식도 가능합니다!

 

다만 주의해야할 점은,

만약 값을 넣어주지 않고 선언한다면 값이 없기 때문에 타입 추론을 하지 못하기 때문에 에러가 납니다.

이 부분을 주의해서 선언해주어야 합니다!

 

 

Dictionary에 또 다른 특징은 값(Value) 타입을 Integer 나 String, Double 등을 사용하지 않고 Any를 사용해줌으로써

비교적 Array보다 자유롭게 값을 입력할 수 있습니다.

 

예를 들어, Array에 값을 넣어주려면

 

var numbers = [1, 2, "3"]	// error!!

 

위의 코드처럼 변수를 선언해준다면 당연히 에러가 나게 됩니다.

왜냐하면 앞의 1, 2는 Integer형이지만, 뒤에 "3"은 String형이기 때문이죠!

 

 

하지만 Dictionary에서는 아래의 코드처럼 선언이 가능합니다.

 

var numbers: [String: Any] = ["하나": 1, "둘": 2, "셋": "3"]

 

이 방법으로 변수를 선언해준다면 이 코드는 에러가 발생하지 않습니다.

왜 그럴까요??

 

이유는 값(value) 타입이 Any로 생성되는데, 이 값(value)은 키(Key)에 해당하는 값(Value)으로 생성되기 떄문입니다.

따라서 키("하나")에 해당하는 값(1)은 다른 키("둘", "셋")에 영향을 받지 않습니다.

 

그렇기 때문에 위의 코드처럼 값(Value)에 Integers와 String 타입을 섞어서 사용해도 에러가 발생하지 않습니다!

 

 

Dictionary 키(Key), 값(Value) 추가

 

다음은 키(Key)와 값(Value) 추가에 대하여 알아보겠습니다.

 

var integers: [String: Any] = [:]
integers["하나"] = 1
integers.updateValue("2", forKey: "하나")

print(integers)	// ["하나": 1, "둘" : "2"]

 

위의 코드처럼 integers의 Dictionary타입을 생성한 후 해당 타입에 맞춰 키(Key)와 값(Value)를 입력해줍니다.

 

 

 

Dictionary 값(Value) 변경 · 제거

 

다음은 값(Value) 변경 · 제거에 대하여 알아보겠습니다.

 

 

  • 값(Value) 변경
var integers = ["one": 1]
integers["two"] = 2

print(integers)	// ["one": 1, "two": 2]

integers["one"] = 100

print(integers) // ["one": 100, "two": 2]

 

위 방법으로 키(Key)에 대한 값(Value)를 변경할 수 있습니다.

 

 

  • 값(Value) 제거

 

var integers = ["one": 1]
integers["two"] = 2

print(integers)	// ["one": 1, "two": 2]

integers.removeValue(forKey: "one")
integers["two"] = nil

 

위 두가지 방법으로 키(Key)에 대한 값(Value)를 제거할 수 있습니다.

특히 값을 제거할 때 .removeValue(forKey: ) 로 제거하는 방법은 지우고자 하는 키(Key)가 없으면 에러가 발생할 수 있으니

주의해서 사용해야 합니다!

 

 

 

 

 

오늘은 Dictionary에 대한 기초적인 것에 대하여 알아봤습니다.

생각보다 글이 길어진것같네요 :)

 

다음엔 Dictionary 관련 메서드에 대하여 알아보겠습니다 :D