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