๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿฅ– Bread Basics/Swift

Swift ๊ณต์‹ ๋ฌธ์„œ ์ •๋ฆฌ - ์ปฌ๋ ‰์…˜ ํƒ€์ž… (Collection Types)

by BreadDev 2025. 4. 10.
728x90

์•ˆ๋…•ํ•˜์„ธ์š”. ์ด๋ฒˆ์—๋Š” Swift ์ปฌ๋ ‰์…˜ ํƒ€์ž…์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Swift๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค: ๋ฐฐ์—ด(Array), ์ง‘ํ•ฉ(Set), ๋”•์…”๋„ˆ๋ฆฌ(Dictionary). ๊ฐ ํƒ€์ž…์˜ ํŠน์„ฑ๊ณผ ์‚ฌ์šฉ๋ฒ•์„ ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ปฌ๋ ‰์…˜ ํƒ€์ž… ๊ฐœ์š”

Swift์—์„œ ์ œ๊ณตํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • ๋ฐฐ์—ด(Array): ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๊ฐ’์˜ ์ปฌ๋ ‰์…˜
  • ์ง‘ํ•ฉ(Set): ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ๊ณ ์œ ํ•œ ๊ฐ’๋งŒ ํฌํ•จํ•˜๋Š” ์ปฌ๋ ‰์…˜
  • ๋”•์…”๋„ˆ๋ฆฌ(Dictionary): ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์„œ๊ฐ€ ์—†๋Š” ์ปฌ๋ ‰์…˜

Swift์˜ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์€ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ํƒ€์ž…๊ณผ ํ‚ค์— ๋Œ€ํ•ด ํ•ญ์ƒ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ค์ˆ˜๋กœ ์ปฌ๋ ‰์…˜์— ์ž˜๋ชป๋œ ํƒ€์ž…์˜ ๊ฐ’์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

์ปฌ๋ ‰์…˜ ํƒ€์ž…(Collection Types): ์—ฌ๋Ÿฌ ๊ฐ’์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

์ปฌ๋ ‰์…˜์˜ ๊ฐ€๋ณ€์„ฑ

์ปฌ๋ ‰์…˜์€ ๋ณ€์ˆ˜(var)์— ํ• ๋‹นํ•˜๋ฉด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•˜๊ณ , ์ƒ์ˆ˜(let)์— ํ• ๋‹นํ•˜๋ฉด ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค:

// ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด
var mutableArray = [1, 2, 3]
mutableArray.append(4)  // [1, 2, 3, 4]

// ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฐฐ์—ด
let immutableArray = [1, 2, 3]
// immutableArray.append(4)  // ์ปดํŒŒ์ผ ์˜ค๋ฅ˜!

๊ฐ€๋ณ€์„ฑ(Mutability): ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋œ ํ›„ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์„ฑ

๐Ÿ“Œ ๋ฐฐ์—ด (Arrays)

๋ฐฐ์—ด์€ ๊ฐ™์€ ํƒ€์ž…์˜ ๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ฐ’์ด ๋ฐฐ์—ด ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์œ„์น˜์— ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด ํƒ€์ž… ๊ตฌ๋ฌธ

Swift ๋ฐฐ์—ด์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ „์ฒด ํ˜•์‹: Array
  • ์ถ•์•ฝ ํ˜•์‹: [Element] (์ฃผ๋กœ ์‚ฌ์šฉ๋จ)

๋นˆ ๋ฐฐ์—ด ์ƒ์„ฑ

// ํƒ€์ž… ๋ช…์‹œ์™€ ํ•จ๊ป˜ ๋นˆ ๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด ์‚ฌ์šฉ
var someInts: [Int] = []

// ์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ ์‚ฌ์šฉ
var someInts = [Int]()

๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด(Array Literal): ๋Œ€๊ด„ํ˜ธ([])๋กœ ๋‘˜๋Ÿฌ์‹ธ์ธ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋œ ๊ฐ’ ๋ชฉ๋ก์œผ๋กœ, ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ฐฐ์—ด ์ƒ์„ฑ

// 0.0์ด 3๋ฒˆ ๋ฐ˜๋ณต๋˜๋Š” ๋ฐฐ์—ด ์ƒ์„ฑ
var threeDoubles = Array(repeating: 0.0, count: 3)
// [0.0, 0.0, 0.0]

๋‘ ๋ฐฐ์—ด ํ•ฉ์น˜๊ธฐ

let firstArray = [1, 2, 3]
let secondArray = [4, 5, 6]
let combinedArray = firstArray + secondArray
// [1, 2, 3, 4, 5, 6]

๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋ฐฐ์—ด ์ƒ์„ฑ

var shoppingList: [String] = ["Eggs", "Milk"]
// ํƒ€์ž… ์ถ”๋ก ์„ ์‚ฌ์šฉํ•œ ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•
var shoppingList = ["Eggs", "Milk"]

๋ฐฐ์—ด ์ ‘๊ทผ ๋ฐ ์ˆ˜์ •

// ๋ฐฐ์—ด์˜ ์š”์†Œ ์ˆ˜ ํ™•์ธ
print("The shopping list contains \(shoppingList.count) items.")

// ๋ฐฐ์—ด์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
if shoppingList.isEmpty {
    print("The shopping list is empty.")
}

// ๋ฐฐ์—ด์— ์š”์†Œ ์ถ”๊ฐ€
shoppingList.append("Flour")
shoppingList += ["Baking Powder"]
shoppingList += ["Chocolate", "Cheese", "Butter"]

// ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋กœ ์š”์†Œ ์ ‘๊ทผ
var firstItem = shoppingList[0]  // "Eggs"

// ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋กœ ์š”์†Œ ๋ณ€๊ฒฝ
shoppingList[0] = "Six eggs"

// ๋ฒ”์œ„๋กœ ์—ฌ๋Ÿฌ ์š”์†Œ ๋ณ€๊ฒฝ
shoppingList[4...6] = ["Bananas", "Apples"]

// ํŠน์ • ์œ„์น˜์— ์š”์†Œ ์‚ฝ์ž…
shoppingList.insert("Maple Syrup", at: 0)

// ์š”์†Œ ์‚ญ์ œ
let mapleSyrup = shoppingList.remove(at: 0)

// ๋งˆ์ง€๋ง‰ ์š”์†Œ ์‚ญ์ œ
let apples = shoppingList.removeLast()

์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ(Subscript): ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด ์ด๋ฆ„ ๋’ค์— ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ๋ฒ•

์ธ๋ฑ์Šค(Index): ๋ฐฐ์—ด ๋‚ด ์š”์†Œ์˜ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •์ˆ˜๊ฐ’์œผ๋กœ, Swift์—์„œ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘

๋ฐฐ์—ด ๋ฐ˜๋ณต

// ๋ชจ๋“  ์š”์†Œ ์ˆœํšŒ
for item in shoppingList {
    print(item)
}

// ์ธ๋ฑ์Šค์™€ ๊ฐ’ ํ•จ๊ป˜ ์ˆœํšŒ
for (index, value) in shoppingList.enumerated() {
    print("Item \(index + 1): \(value)")
}

enumerated(): ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด (์ธ๋ฑ์Šค, ๊ฐ’) ์Œ์„ ํŠœํ”Œ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ

๐Ÿ“Œ ์ง‘ํ•ฉ (Sets)

์ง‘ํ•ฉ์€ ์ˆœ์„œ๊ฐ€ ์—†๊ณ  ๊ณ ์œ ํ•œ ๊ฐ’๋งŒ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜์ž…๋‹ˆ๋‹ค. ํ•ญ๋ชฉ์˜ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ง‘ํ•ฉ ํƒ€์ž… ๊ตฌ๋ฌธ

์ง‘ํ•ฉ์€ Set ํ˜•์‹์œผ๋กœ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค(์ถ•์•ฝํ˜•์€ ์—†์Œ).

ํ•ด์‹œ ๊ฐ€๋Šฅํ•œ ํƒ€์ž…

์ง‘ํ•ฉ์— ์ €์žฅ๋˜๋Š” ํƒ€์ž…์€ ๋ฐ˜๋“œ์‹œ Hashable ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Swift์˜ ๊ธฐ๋ณธ ํƒ€์ž…(String, Int, Double, Bool)์€ ๋ชจ๋‘ ํ•ด์‹œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ•ด์‹œ ๊ฐ€๋Šฅ(Hashable): ๊ฐ’์„ ๊ณ ์œ ํ•œ ์ •์ˆ˜ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์˜ ํŠน์„ฑ

ํ•ด์‹œ๊ฐ’(Hash Value): ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ • ๊ธธ์ด์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋กœ, ์ง‘ํ•ฉ์ด๋‚˜ ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๋Š” ๋ฐ ์‚ฌ์šฉ

๋นˆ ์ง‘ํ•ฉ ์ƒ์„ฑ

var letters = Set<Character>()

๋ฐฐ์—ด ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ง‘ํ•ฉ ์ƒ์„ฑ

var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
// ํƒ€์ž… ๋ช…์‹œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ„๋‹จํžˆ ์ž‘์„ฑ ๊ฐ€๋Šฅ
var favoriteGenres: Set = ["Rock", "Classical", "Hip hop"]

์ง‘ํ•ฉ ์ ‘๊ทผ ๋ฐ ์ˆ˜์ •

// ์ง‘ํ•ฉ์˜ ์š”์†Œ ์ˆ˜ ํ™•์ธ
print("I have \(favoriteGenres.count) favorite music genres.")

// ์ง‘ํ•ฉ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
if favoriteGenres.isEmpty {
    print("I have no favorite music genres.")
}

// ์ง‘ํ•ฉ์— ์š”์†Œ ์ถ”๊ฐ€
favoriteGenres.insert("Jazz")

// ์ง‘ํ•ฉ์—์„œ ์š”์†Œ ์ œ๊ฑฐ
if let removedGenre = favoriteGenres.remove("Rock") {
    print("\(removedGenre) has been removed.")
}

// ์ง‘ํ•ฉ์— ํŠน์ • ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
if favoriteGenres.contains("Funk") {
    print("I like Funk.")
}

์ง‘ํ•ฉ ๋ฐ˜๋ณต

// ์š”์†Œ ์ˆœํšŒ (์ˆœ์„œ๋Š” ๋ณด์žฅ๋˜์ง€ ์•Š์Œ)
for genre in favoriteGenres {
    print("\(genre)")
}

// ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ์ˆœํšŒ
for genre in favoriteGenres.sorted() {
    print("\(genre)")
}

์ง‘ํ•ฉ ์—ฐ์‚ฐ

์ง‘ํ•ฉ์€ ์ˆ˜ํ•™์˜ ์ง‘ํ•ฉ ์ด๋ก ๊ณผ ๋™์ผํ•œ ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let primeDigits: Set = [2, 3, 5, 7]

// ํ•ฉ์ง‘ํ•ฉ: ๋‘ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ๊ฐ’์„ ํฌํ•จ
oddDigits.union(evenDigits)  // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

// ๊ต์ง‘ํ•ฉ: ๋‘ ์ง‘ํ•ฉ์— ๊ณตํ†ต์œผ๋กœ ํฌํ•จ๋œ ๊ฐ’๋งŒ ํฌํ•จ
oddDigits.intersection(primeDigits)  // [3, 5, 7]

// ์ฐจ์ง‘ํ•ฉ: ๋‹ค๋ฅธ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜์ง€ ์•Š์€ ๊ฐ’๋งŒ ํฌํ•จ
oddDigits.subtracting(primeDigits)  // [1, 9]

// ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ: ํ•œ์ชฝ ์ง‘ํ•ฉ์—๋งŒ ์žˆ๋Š” ๊ฐ’์„ ํฌํ•จ
oddDigits.symmetricDifference(primeDigits)  // [1, 2, 9]

ํ•ฉ์ง‘ํ•ฉ(Union): ๋‘ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒˆ ์ง‘ํ•ฉ

๊ต์ง‘ํ•ฉ(Intersection): ๋‘ ์ง‘ํ•ฉ์— ๊ณตํ†ต์œผ๋กœ ํฌํ•จ๋œ ์š”์†Œ๋งŒ ํฌํ•จํ•˜๋Š” ์ƒˆ ์ง‘ํ•ฉ

์ฐจ์ง‘ํ•ฉ(Subtraction): ํ•œ ์ง‘ํ•ฉ์—์„œ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์— ํฌํ•จ๋œ ์š”์†Œ๋ฅผ ์ œ์™ธํ•œ ์ƒˆ ์ง‘ํ•ฉ

๋Œ€์นญ์ฐจ์ง‘ํ•ฉ(Symmetric Difference): ๋‘ ์ง‘ํ•ฉ ์ค‘ ํ•œ์ชฝ์—๋งŒ ์žˆ๋Š” ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒˆ ์ง‘ํ•ฉ

์ง‘ํ•ฉ ๊ด€๊ณ„ ์—ฐ์‚ฐ

let houseAnimals: Set = ["๐Ÿถ", "๐Ÿฑ"]
let farmAnimals: Set = ["๐Ÿฎ", "๐Ÿ”", "๐Ÿ‘", "๐Ÿถ", "๐Ÿฑ"]
let cityAnimals: Set = ["๐Ÿฆ", "๐Ÿญ"]

// ๋ถ€๋ถ„์ง‘ํ•ฉ ์—ฌ๋ถ€ ํ™•์ธ
houseAnimals.isSubset(of: farmAnimals)  // true

// ์ƒ์œ„์ง‘ํ•ฉ ์—ฌ๋ถ€ ํ™•์ธ
farmAnimals.isSuperset(of: houseAnimals)  // true

// ์„œ๋กœ์†Œ ์—ฌ๋ถ€ ํ™•์ธ (๊ณตํ†ต ์š”์†Œ๊ฐ€ ์—†๋Š”์ง€)
farmAnimals.isDisjoint(with: cityAnimals)  // true

๋ถ€๋ถ„์ง‘ํ•ฉ(Subset): ํ•œ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋‹ค๋ฅธ ์ง‘ํ•ฉ์— ํฌํ•จ๋˜๋Š” ๊ด€๊ณ„

์ƒ์œ„์ง‘ํ•ฉ(Superset): ํ•œ ์ง‘ํ•ฉ์ด ๋‹ค๋ฅธ ์ง‘ํ•ฉ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ด€๊ณ„

์„œ๋กœ์†Œ ์ง‘ํ•ฉ(Disjoint Sets): ๊ณตํ†ต ์š”์†Œ๊ฐ€ ์—†๋Š” ๋‘ ์ง‘ํ•ฉ์˜ ๊ด€๊ณ„

๐Ÿ“Œ ๋”•์…”๋„ˆ๋ฆฌ (Dictionaries)

๋”•์…”๋„ˆ๋ฆฌ๋Š” ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋Š” ์ปฌ๋ ‰์…˜์œผ๋กœ, ๊ฐ ๊ฐ’์€ ๊ณ ์œ ํ•œ ํ‚ค์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”•์…”๋„ˆ๋ฆฌ ํƒ€์ž… ๊ตฌ๋ฌธ

Swift ๋”•์…”๋„ˆ๋ฆฌ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • ์ „์ฒด ํ˜•์‹: Dictionary<Key, Value>
  • ์ถ•์•ฝ ํ˜•์‹: [Key: Value] (์ฃผ๋กœ ์‚ฌ์šฉ๋จ)

ํ•ด์‹œ ๊ฐ€๋Šฅํ•œ ํ‚ค

๋”•์…”๋„ˆ๋ฆฌ์˜ ํ‚ค ํƒ€์ž…์€ ๋ฐ˜๋“œ์‹œ Hashable ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋นˆ ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ

// ํƒ€์ž…์„ ๋ช…์‹œํ•˜์—ฌ ๋นˆ ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ
var namesOfIntegers = [Int: String]()

// ํƒ€์ž…์ด ์ด๋ฏธ ๋ช…์‹œ๋œ ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•
namesOfIntegers = [:]

๋”•์…”๋„ˆ๋ฆฌ ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋”•์…”๋„ˆ๋ฆฌ ์ƒ์„ฑ

var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
// ํƒ€์ž… ์ถ”๋ก  ์‚ฌ์šฉ
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]

๋”•์…”๋„ˆ๋ฆฌ ๋ฆฌํ„ฐ๋Ÿด(Dictionary Literal): ๋Œ€๊ด„ํ˜ธ([]) ์•ˆ์— ์ฝœ๋ก (:)์œผ๋กœ ๊ตฌ๋ถ„๋œ ํ‚ค-๊ฐ’ ์Œ๋“ค๋กœ, ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•

๋”•์…”๋„ˆ๋ฆฌ ์ ‘๊ทผ ๋ฐ ์ˆ˜์ •

// ๋”•์…”๋„ˆ๋ฆฌ์˜ ํ•ญ๋ชฉ ์ˆ˜ ํ™•์ธ
print("The airports dictionary contains \(airports.count) items.")

// ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
if airports.isEmpty {
    print("The airports dictionary is empty.")
}

// ๋”•์…”๋„ˆ๋ฆฌ์— ํ•ญ๋ชฉ ์ถ”๊ฐ€
airports["LHR"] = "London"

// ๋”•์…”๋„ˆ๋ฆฌ์˜ ๊ฐ’ ๋ณ€๊ฒฝ
airports["LHR"] = "London Heathrow"

// updateValue ๋ฉ”์„œ๋“œ๋กœ ๊ฐ’ ์—…๋ฐ์ดํŠธ (์ด์ „ ๊ฐ’ ๋ฐ˜ํ™˜)
if let oldValue = airports.updateValue("Dublin Airport", forKey: "DUB") {
    print("The old value was \(oldValue).")
}

// ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ๊ฐ’ ๊ฐ€์ ธ์˜ค๊ธฐ
if let airportName = airports["DUB"] {
    print("The name of the airport is \(airportName).")
} else {
    print("That airport is not in the airports dictionary.")
}

// ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ํ•ญ๋ชฉ ์ œ๊ฑฐ (nil ํ• ๋‹น)
airports["APL"] = "Apple International"
airports["APL"] = nil  // ์ œ๊ฑฐ๋จ

// removeValue ๋ฉ”์„œ๋“œ๋กœ ํ•ญ๋ชฉ ์ œ๊ฑฐ (์ œ๊ฑฐ๋œ ๊ฐ’ ๋ฐ˜ํ™˜)
if let removedValue = airports.removeValue(forKey: "DUB") {
    print("The removed airport's name is \(removedValue).")
}

ํ‚ค-๊ฐ’ ์Œ(Key-Value Pair): ๋”•์…”๋„ˆ๋ฆฌ์—์„œ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ณ ์œ  ์‹๋ณ„์ž(ํ‚ค)์™€ ๊ทธ์— ์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ(๊ฐ’)์˜ ์กฐํ•ฉ

๋”•์…”๋„ˆ๋ฆฌ ๋ฐ˜๋ณต

// ํ‚ค-๊ฐ’ ์Œ ์ˆœํšŒ
for (airportCode, airportName) in airports {
    print("\(airportCode): \(airportName)")
}

// ํ‚ค๋งŒ ์ˆœํšŒ
for airportCode in airports.keys {
    print("Airport code: \(airportCode)")
}

// ๊ฐ’๋งŒ ์ˆœํšŒ
for airportName in airports.values {
    print("Airport name: \(airportName)")
}

// ํ‚ค๋‚˜ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜
let airportCodes = [String](airports.keys)
let airportNames = [String](airports.values)

// ์ •๋ ฌ๋œ ์ˆœ์„œ๋กœ ์ˆœํšŒ
for airportCode in airports.keys.sorted() {
    print("Airport code: \(airportCode)")
}

keys: ๋”•์…”๋„ˆ๋ฆฌ์˜ ๋ชจ๋“  ํ‚ค๋ฅผ ํฌํ•จํ•˜๋Š” ์ปฌ๋ ‰์…˜์— ์ ‘๊ทผํ•˜๋Š” ํ”„๋กœํผํ‹ฐ

values: ๋”•์…”๋„ˆ๋ฆฌ์˜ ๋ชจ๋“  ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ์ปฌ๋ ‰์…˜์— ์ ‘๊ทผํ•˜๋Š” ํ”„๋กœํผํ‹ฐ

๐Ÿ“Œ ์ •๋ฆฌ

Swift์˜ ์„ธ ๊ฐ€์ง€ ์ฃผ์š” ์ปฌ๋ ‰์…˜ ํƒ€์ž…์€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

  • ๋ฐฐ์—ด(Array): ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๊ฑฐ๋‚˜ ๋™์ผํ•œ ํ•ญ๋ชฉ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
  • ์ง‘ํ•ฉ(Set): ์ค‘๋ณต ์—†์ด ๊ณ ์œ ํ•œ ๊ฐ’๋งŒ ํ•„์š”ํ•˜๊ณ  ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜์ง€ ์•Š์„ ๋•Œ ์‚ฌ์šฉ
  • ๋”•์…”๋„ˆ๋ฆฌ(Dictionary): ํ‚ค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•  ๋•Œ ์‚ฌ์šฉ

๊ฐ ์ปฌ๋ ‰์…˜ ํƒ€์ž…์€ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋ฏ€๋กœ, ํ•ญ์ƒ ์ •์˜๋œ ํƒ€์ž…์˜ ๊ฐ’๋งŒ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Swift ์ฝ”๋“œ์˜ ์•ˆ์ •์„ฑ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.