5.4.1 딕셔너리의 선언과 초기화

먼저 아무 초기값도 할당하지 않고 빈 딕셔너리를 선언하고 초기화하는 구문 형식은 다음과 같습니다.

Dictionary <키의 타입, 값의 타입>()

딕셔너리를 선언할 때는 Dictionary 구조체가 사용됩니다. 이 객체를 사용하여 선언할 때는 배열과 마찬가지로 < 와 > 사이에 키로 사용할 타입과 값으로 사용할 타입을 지정해야 합니다. 이를 제네릭이라고 합니다. 이 제네릭 안에 첫번째에는 키, 두번째에는 값으로 사용할 타입을 작성합니다. 구문의 마지막에는 초기화를 위한 연산자인 ()이 사용됩니다. 초기화 연산자를 거쳐야만 선언된 딕셔너리가 메모리에서 데이터를 저장할 공간을 할당받을 수 있습니다.

이를 바탕으로 몇 가지 딕셔너리를 선언해봅시다.

Dictionary<String, Int>()
Dictionary<String, String>()
Dictionary<String, AnyObject>()
Dictionary<Character, String>()

위의 딕셔너리 선언들을 간결한 형식으로 표현해 보겠습니다.

[키로 사용할 타입: 값으로 사용할 타입]()
[String: Int]()
[String: String]()
[String: AnyObject]()
[Character: String]()

두 가지 방법을 익혔으니 실제 예제를 살펴보겠습니다.

// 방법 1
var capital = Dictionary<String, String>()
// 방법 2
var capital = [String: String]()

// 선언과 초기화 분리 방법 1
var capital: Dictionary<String, String>
capital = Dictionary<String, String>()

// 선언과 초기화 분리 방법 2
var capital: [String: String]
capital = Dictionary()

// 선언과 초기화 분리 방법 3
var capital: [String: String]
capital = [String: String]()

// 선언과 초기화 분리 방법 4
var capital: [String: String]
capital = [:]

주의점은 배열에서와는 달리 타입 어노테이션으로 키와 값의 타입이 이미 선언되었다고 하여 초기화 구문에서 함부로 타입 작성을 생략해서는 안됩니다. 타입이 생략된 초기화 구문은 잘못 해석될 우려가 있기 때문입니다.

위 예제에서 2번과 4번을 주의해야 합니다. 초기화 구문의 타입 지정이 생략되어 있는데 이는 사전에 타입 어노테이션을 통해 딕셔너리의 타입이 명시적으로 선언되어 있기 때문입니다. 이외의 초기화 구문에서는 함부로 타입을 생략하면 안 됩니다.

Last updated