Swift 기초문법 - Collection Dictionary사전 를 알아 보자

Swift Collection의 한 종류인 Dictionary에 대해서 공부를 해 봅시다. Dictionarys는 해시 테이블의 유형입니다. 원하는 항목에 빠르게 접근할 수 있습니다. 단어적 의미는 사전이죠. 실제 영한사전을 예로 들어보겠습니다. Apple의 뜻을 찾기 위해 사전에 검색을 했습니다. 그러면 우리가 원하는 사과를 얻을 수 있습니다. 이렇게 내가 원하는 key를 알 때에 값에 빠르게 접근할 수 있는 Collection입니다.

 

Dictionary

Swift의 Dictionary 또한 같다고 생각하시면 됩니다. 즉 keyvalue 를 저장할 수 있는 컬렉션입니다. 예시에서 말한 Apple은 key에 해당하고 사과는 value에 해당합니다. 정리하자면 key값을 통해서 Dictionary에 있는 원하는 value를 찾을수 있는 것이죠. 이렇게 내가 원하는 key를 알 때에 값에 빠르게 접근할 수 있는 Collection입니다.

인덱스 순번이 있는 Array와 다르게 Dictionary는 순서가 정해져 있지 않습니다. 정렬을 위해서는 key 혹은 value값으로 sort를 해줄 수 있습니다.

 

Dictionary 생성하기

//비어있는 Dictionary 생성
var studentDic: [String : Int] = [:]
var studentDic = [String : Int]()
var studentDic : Dictionary = [String : Int]()
var studentDic: Dictionary<String, Int> = Dictionary<String, Int>()

var studentDic: [String : Int] = ["민몽" : 80, "지나" : 95, "웅이" : 90]
var studentDic: Dictionary = ["민몽" : 80, "지나" : 95, "웅이" : 90]
var studentDic = ["민몽" : 80, "지나" : 95, "웅이" : 90] // Collection 역시 타입 유추가 가능합니다.
var studentDic: Dictionary<String, Int> = ["민몽" : 80, "지나" : 95, "웅이" : 90]

여러가지 방법으로 Dictionary를 만들어 줄 수 있습니다. 베이스는 [KeyType, ValueType] 혹은 <KeyType, ValueType>입니다. 앞에서 설명했듯이 배열과는 다르게 순서가 정해져 있지 않습니다. 따라서 "민몽", "지나", "웅이" 순으로 Dictrionary에 저장된다는 보장이 없습니다.

 

 

Dictionary 접근하기

studentDic["민몽"] //결과 : 80
studentDic["동식"] // 결과 : nil

Dictionary의 값에 접근하기 위해서는 Key가 필요합니다. 앞에 학생들의 점수를 보관하고 있는 Dictionary를 살펴보겠습니다. "민몽" 이라는 키로 접근하고 있습니다. 그런데 여기서 "동식" 이라는 학생으로 접근을 해보겠습니다. 앞에서 초기화할 때에 없던 학생의 이름입니다. 결과는 nil이 나왔네요. nil이라는건 Optional 임을 알 수 있습니다.

 

swift optional

 

if let minmongScore = studentDic["민몽"] {
	print(minmongScore)
} else {
	print("없는 학생입니다.")
}

어떤 Key든 찾아볼 수는 있지만 해당 키에 대응하는 데이터 Value값이 없을 수도 있습니다. 그렇기 때문에 Optional 타입으로 되어있는 것이죠. Dictionary의 데이터를 안전하게 가져와서 사용하려면 Optional Binding을 사용하면 됩니다.

 

 

Dictionary 추가, 삭제하기

studentDic["민몽"] = 100 // value 업데이트 
studentDic["동식"] = 80  // 추가하기
studentDic["웅이"] = nil // 삭제하기

Dictionary에 키로 접근하여서 값을 넣어주게 되면 기존의 값이 업데이트 됩니다. 간단한 방법으로 추가 혹은 삭제할 수 있습니다. Dictionary에 키로 접근 값을 넣어줍니다. 해당 키에 대응하는 데이터 값이 없을 경우에는 추가 되게 됩니다. nil을 value값으로 넣어주게 되면 Dictionary에서 삭제 시킬수 있습니다.

studentDic.updateValue(200, forKey: "민몽") // value 업데이트
studentDic.updateValue(60, forKey: "무영")  // 추가하기
studentDic.removeValue(forKey: "웅이")	   // 삭제하기

함수를 통해서 데이터 업데이트, 추가, 삭제도 가능합니다. updateValue 함수입니다. 파라미터로는 value, key 순서입니다. 이미 Dictionary에 이미 key에 대응하는 value가 있다면 업데이트됩니다. 없을 경우는 마찬가지로 추가되게 됩니다. 삭제하는 방법으로는 removeValue함수를 통해서 가능합니다. 파라미터 forKey에 삭제하고 싶은 키를 넘겨주면 삭제가 된걸 볼 수 있습니다.

 

Dictionary for문(반복문)

for (name, score) in studentDic1 {
    print("학생 : \(name), 점수 : \(score)")
}

// 출력 결과
// 학생 : 지나, 점수 : 95
// 학생 : 민몽, 점수 : 80
// 학생 : 웅이, 점수 : 90

앞에서도 언근했지만 swift Dictionary는 순서 보장이 되어있지 않습니다. 초기화할 때에는 민몽, 지나, 웅이 순서로 하였지만 반복문의 출력 결과를 보면 지나부터 인 걸 알 수 있습니다.

//key만 사용할 경우
for (name) in studentDic1.keys {
    print("학생 : \(name)")
}

//value만 사용할 경우
for (score) in studentDic1.values {
    print("점수 : \(score)")
}

Dictionary의 key 혹은 value값만 for문(반복문)에서 사용할 수도 있습니다. 방법은 keysvalues를 이용하면 됩니다.

 

 

그리드형(광고전용)

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band

댓글

Designed by JB FACTORY