[Swift 문법] 05. Swift μ»¬λ ‰μ…˜ νƒ€μž…μ˜ Dictionary(λ”•μ…”λ„ˆλ¦¬)λ₯Ό λ°°μ›Œλ³΄μž.

2021. 1. 7. 19:16γ†πŸ§‘πŸ»‍πŸ’» iOS 개발/Swift

ν•΄λ‹Ή 글은 μ•Όκ³°λ‹˜μ˜ μŠ€μœ„ν”„νŠΈ κ°•μ˜μ™€ 개인적인 곡뢀λ₯Ό μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€.


벌써 2021년이 λ˜κ³ λ‚˜μ„œ μΌμ£ΌμΌμ΄λΌλŠ” μ‹œκ°„μ΄ ν˜λ €μŠ΅λ‹ˆλ‹€. λ‹€λ“€ 희망찬 ν•˜λ£¨ ν•˜λ£¨λ₯Ό 보내고 κ³„μ‹ κ°€μš”? 눈이 많이 μ™”λŠ”λ° 감기 μ‘°μ‹¬ν•˜μ‹œκ³  λ―Έλ„λŸ¬μš΄ κΈΈ μ‘°μ‹¬ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€.

Swiftμ—λŠ” λ§Žμ€ 수의 데이터λ₯Ό λ¬Άμ–΄μ„œ μ €μž₯ν•˜κ³  관리할 수 μžˆλŠ” μ»¬λ ‰μ…˜ νƒ€μž…μ„ μ œκ³΅ν•©λ‹ˆλ‹€. μ»¬λ ‰μ…˜ νƒ€μž…μ—λŠ” Array (λ°°μ—΄), Dictionary (λ”•μ…”λ„ˆλ¦¬), Set (μ„ΈνŠΈ)κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€.

μ €λ²ˆ ν¬μŠ€νŒ…μ—μ„œ μ»¬λ ‰μ…˜ νƒ€μž…μΈ Arrayλ₯Ό λ‹€λ€˜λ‹€λ©΄ μ΄λ²ˆμ—λŠ” Dictionary에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

1. Dictionary 의 νŠΉμ§• 

λ”•μ…”λ„ˆλ¦¬λŠ” μš”μ†Œλ“€μ΄ μˆœμ„œ 없이 ν‚€(Key) 와 κ°’(Value)의 쌍으둜 κ΅¬μ„±λ˜λŠ” μžλ£Œκ΅¬μ‘°μž…λ‹ˆλ‹€. 이 λ”•μ…”λ„ˆλ¦¬ μ•ˆμ—λŠ” 같은 이름을 가진 ν‚€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 즉, λ”•μ…”λ„ˆλ¦¬μ—μ„œ ν‚€λŠ” 값을 λŒ€λ³€ν•˜λŠ” μœ μΌν•œ μ‹λ³„μžκ°€ λ©λ‹ˆλ‹€. 각 값은 ν‚€λ‘œ 접근이 κ°€λŠ₯ν•˜λ©° λ”•μ…”λ„ˆλ¦¬ 내뢀에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” ν‚€λ‘œ μ ‘κ·Όν•˜κ²Œ 되면 nil 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

var someDictionary: Dictionary<String, Int> = Dictionary<String, Int>()

var anotherDictionary: [String: Int] = [String: Int]()

print(anotherDictionary["extramilejin"])	// λ”•μ…”λ„ˆλ¦¬ 내뢀에 ν‚€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šμ„ 경우 nil λ°˜ν™˜

someDictionary["Sung-Ho"] = 1			// ν‚€λ‘œ 값을 μΆ”κ°€

print(someDictionary["Sung-Ho"])		// ν‚€λ‘œ 값에 μ ‘κ·Ό


2. Dictionary νƒ€μž…μ˜ μ„ μ–Έ

var [λ”•μ…”λ„ˆλ¦¬ 이름]:  Dictionary<ν‚€ νƒ€μž…, κ°’ νƒ€μž…> = Dictionary<ν‚€ νƒ€μž…, κ°’ νƒ€μž…>() 의 κΈ°λ³Έ ν˜•νƒœλ₯Ό κ°€μ§‘λ‹ˆλ‹€. Array와 λ§ˆμ°¬κ°€μ§€λ‘œ Swift μ—μ„œλŠ” λ”•μ…”λ„ˆλ¦¬ μ„ μ–Έμ˜ λ‹€μ–‘ν•œ λ™μΌν‘œν˜„μ„ ν—ˆλ½ν•©λ‹ˆλ‹€. λŒ€κ΄„ν˜Έ([ ])μ•ˆμ— 킀와 κ°’μ˜ μŒλ“€μ„ λ„£μ–΄ λ°”λ‘œ μ΄ˆκΈ°ν™”λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€.

// Dictionary μ„ μ–Έ

var anyDictionary: Dictionary<String, Int> = [String: Int]()
    
// 동일 ν‘œν˜„
// var anyDictionary: Dictionary<String, Any> = Dictionary<String, Any>()
// var anyDictionary: Dictionary<String, Any> = [:]
// var anyDictionary: [String: Any] = Dictionary<String, Any>()
// var anyDictionary: [String: Any] = [String: Any]()
// var anyDictionary: [String: Any] = [:]
// var anyDictionary = [String: Any]()

// μ΄ˆκΈ°ν™”
// var anyDictionary: [String: Int] = ["extramilejin": 28, "korea": 2021]


3. Dictionary νƒ€μž…μ˜ ν”„λ‘œνΌν‹°μ™€ λ©”μ„œλ“œ

  • isEmpty : λΉ„μ–΄μžˆλŠ” λ”•μ…”λ„ˆλ¦¬μΈμ§€ μ•„λ‹Œμ§€ Bool νƒ€μž…μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

  • count : λ”•μ…”λ„ˆλ¦¬μ— λͺ‡ 개의 μš”μ†Œκ°€ μžˆλŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • removeValue(forKey: ) : Key에 ν•΄λ‹Ήν•˜λŠ” 값을 μ°Ύμ•„ μ œκ±°ν•˜κ³  κ·Έ 값을 λ°˜ν™˜ν•©λ‹ˆλ‹€. λ§Œμ•½ λ”•μ…”λ„ˆλ¦¬ μ•ˆμ— 킀에 ν•΄λ‹Ήν•˜λŠ” 값이 μ—†λ‹€λ©΄ nil을 λ°˜ν™˜ ν•©λ‹ˆλ‹€. 이 경우 기본값을 λŒλ €μ£Όλ„λ‘ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • λ”•μ…”λ„ˆλ¦¬μ΄λ¦„ [ ν‚€ ] = κ°’ : λ”•μ…”λ„ˆλ¦¬μ— ν‚€ 와 값을 μŒμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.

  • λ”•μ…”λ„ˆλ¦¬μ΄λ¦„ [ ν‚€ ] = nil : λ”•μ…”λ„ˆλ¦¬μ—μ„œ 킀에 ν•΄λ‹Ήν•˜λŠ” 값을 nil둜 ν• λ‹Ήν•˜μ—¬ μ œκ±°ν•©λ‹ˆλ‹€.
// Properties , method

var intDictionary: [String: Int] = ["extramilejin": 28, "korea": 2021]

print(intDictionary.isEmpty)                        // false
print(intDictionary.count)                          // 2
print(intDictionary.removeValue(forKey: "korea"))   // Optional(2021)
print(intDictionary.count)                          // 1
print(intDictionary.removeValue(forKey: "korea"))   // nil: 값이 μ—†μŒμ„ λœ»ν•œλ‹€.
print(intDictionary["korea", default: 0])           // 0: 값이 μ—†μœΌλ©΄ κΈ°λ³Έκ°’ 0
    


5. 마무리 

λ‹€μŒ ν¬μŠ€νŒ…μ—μ„œ λ‚˜λ¨Έμ§€ μ»¬λ ‰μ…˜ νƒ€μž…μΈ Set을 λ‹€λ€„λ³΄κ² μŠ΅λ‹ˆλ‹€! λΆ€μ‘±ν•œ λΆ€λΆ„μ΄λ‚˜ κΆκΈˆν•œ 점 λŒ“κΈ€ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€ ^^