iOS/Swift

[Swift] μ»¬λ ‰μ…˜ νƒ€μž…(Collection Type)에 λŒ€ν•΄μ„œ

κ²½ν‘Έ 2023. 3. 26. 18:30
λ°˜μ‘ν˜•

μ•ˆλ…•ν•˜μ„Έμš”~ 

 

μ˜€λŠ˜μ€ μ»¬λ ‰μ…˜ νƒ€μž…μ— λŒ€ν•΄μ„œ μ •λ¦¬ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

 

μ»¬λ ‰μ…˜ νƒ€μž…μ€ 데이터λ₯Ό λͺ¨μœΌκ³ , μ €μž₯ν•˜κ³ , μ‚¬μš©ν•˜λŠ” 방법을 μ •μ˜ν•œ 좔상화 κ°œλ…μž…λ‹ˆλ‹€.

Swift의 μ»¬λ ‰μ…˜ νƒ€μž…μ€ Array, Set, Dictionary둜 3가지가 μžˆμŠ΅λ‹ˆλ‹€.

 

1. μ»¬λ ‰μ…˜ νƒ€μž…μ˜ μ’…λ₯˜

(1) Array

ArrayλŠ” 데이터가 μˆœμ„œλ₯Ό 가지고 μžˆλŠ” 리슀트 ν˜•νƒœμ˜ μ»¬λ ‰μ…˜ νƒ€μž…μž…λ‹ˆλ‹€. ArrayλŠ” 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터에 μ ‘κ·Όν•  수 있으며, μΈλ±μŠ€λŠ” 0λΆ€ν„° μ‹œμž‘ν•©λ‹ˆλ‹€. μ•„λž˜λŠ” 배열을 μƒμ„±ν•˜κ³ , 값을 μΆ”κ°€ν•˜κ³ , 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 읽고 λ³€κ²½ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

 

// λ°°μ—΄ 생성
var numbers = [1, 2, 3, 4, 5]

// 배열에 값을 μΆ”κ°€
numbers.append(6)

// λ°°μ—΄ 인덱슀 μ‚¬μš©ν•˜μ—¬ κ°’ 읽기
let firstNumber = numbers[0]

// λ°°μ—΄ 인덱슀 μ‚¬μš©ν•˜μ—¬ κ°’ λ³€κ²½
numbers[1] = 10

(2) Set

Set은 λ°μ΄ν„°μ˜ 집합을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. Set은 μˆœμ„œλ₯Ό 가지지 μ•ŠμœΌλ©°, μ€‘λ³΅λœ 값을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•„λž˜λŠ” Set을 μƒμ„±ν•˜κ³ , 값을 μΆ”κ°€ν•˜κ³ , 값을 μ œκ±°ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

 

// Set 생성
var fruits: Set<String> = ["apple", "banana", "orange"]

// Set에 값을 μΆ”κ°€
fruits.insert("grape")

// Setμ—μ„œ 값을 제거
fruits.remove("banana")

(3) Dictionary

DictionaryλŠ” ν‚€-κ°’ μŒμ„ λ‚˜νƒ€λ‚΄λŠ” 데이터 νƒ€μž…μž…λ‹ˆλ‹€.

각각의 ν‚€λŠ” μœ μΌν•˜λ©°, ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 값에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ•„λž˜λŠ” Dictionaryλ₯Ό μƒμ„±ν•˜κ³ , 값을 μΆ”κ°€ν•˜κ³ , 값을 μ œκ±°ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

 

// Dictionary 생성
var scores = ["영수": 80, "철수": 90, "λ―Έμ• ": 70]

// Dictionary에 값을 μΆ”κ°€
scores["덕ꡬ"] = 95

// Dictionaryμ—μ„œ 값을 제거
scores.removeValue(forKey: "덕ꡬ")

 

 

Collection ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•˜λŠ” νƒ€μž…μ€ for-in 루프와 같은 일반적인 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, Array, Set, DictionaryλŠ” Collection ν”„λ‘œν† μ½œμ„ κ΅¬ν˜„ν•˜λŠ” νƒ€μž…μ΄κΈ° λ•Œλ¬Έμ— 저희가 잘 μ•Œκ³  μžˆλŠ” filter, map, reduce, sorted, reversed λ“±μ˜ λ©”μ„œλ“œλ₯Ό μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

let numbers = [1, 2, 3, 4, 5]

// 짝수만 필터링
let evenNumbers = numbers.filter { $0 % 2 == 0 }

// μ œκ³±μ„ ꡬ함
let squares = numbers.map { $0 * $0 }

// 합을 ꡬ함
let sum = numbers.reduce(0, { $0 + $1 })

// μ •λ ¬
let sortedNumbers = numbers.sorted()

// μ—­μˆœμœΌλ‘œ
let reversedNumbers = numbers.reversed()

 

2. μ»¬λ ‰μ…˜ νƒ€μž… λΉ„κ΅ν•˜κΈ°

Swift의 Collection νƒ€μž…μΈ Array, Set, DictionaryλŠ” 각각의 νŠΉμ§•μ΄ μžˆμ§€λ§Œ, κ³΅ν†΅μ μœΌλ‘œ λͺ¨λ‘ 데이터λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

곡톡점

μ—¬λŸ¬ 데이터λ₯Ό ν•˜λ‚˜λ‘œ λ¬Άμ–΄ 쀄 수 μžˆλ‹€λŠ” 점과 데이터λ₯Ό μΆ”κ°€, μ‚­μ œ, μˆ˜μ •ν•  수 μžˆλ‹€λŠ” 곡톡점이 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ, Collection ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜κΈ° λ•Œλ¬Έμ— μ•žμ„œ μ„€λͺ…λ“œλ Έλ˜ μ—¬λŸ¬ λ©”μ„œλ“œλ₯Ό 톡해 데이터λ₯Ό λ‹€λ£° 수 μžˆμŠ΅λ‹ˆλ‹€.

 

차이점

1. 데이터 μ €μž₯ 방식

  • Array: 데이터λ₯Ό μˆœμ„œλŒ€λ‘œ μ €μž₯ν•˜κ³ , 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터에 μ ‘κ·Όν•©λ‹ˆλ‹€.
  • Set: 데이터λ₯Ό 쀑볡없이 μ €μž₯ν•˜κ³ , μˆœμ„œλ₯Ό μœ μ§€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • Dictionary: ν‚€-κ°’ 쌍으둜 데이터λ₯Ό μ €μž₯ν•˜κ³ , ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 값에 μ ‘κ·Όν•©λ‹ˆλ‹€.

2. 쀑볡 데이터 ν—ˆμš© μ—¬λΆ€

  • Array: 쀑볡 데이터λ₯Ό ν—ˆμš©ν•©λ‹ˆλ‹€.
  • Set: 쀑볡 데이터λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • Dictionary: μ€‘λ³΅λœ ν‚€λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

3. 인덱슀 μ ‘κ·Ό 방법

  • Array: 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터에 μ ‘κ·Όν•©λ‹ˆλ‹€.
  • Set: μˆœμ„œλ₯Ό 가지지 μ•ŠμœΌλ―€λ‘œ, 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터에 직접 μ ‘κ·Όν•  μˆ˜λŠ” μ—†μŠ΅λ‹ˆλ‹€.
  • Dictionary: ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 값을 μ ‘κ·Όν•©λ‹ˆλ‹€.

Set은 두 μ»¬λ ‰μ…˜ νƒ€μž…κ³ΌλŠ” λ‹€λ₯΄κ²Œ μΈλ±μŠ€λ‚˜ ν‚€κ°’μœΌλ‘œ μ ‘κ·Όν•  μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€. 

κ·Έλž˜μ„œ containsλΌλŠ” λ©”μ„œλ“œλ₯Ό 톡해 μ›μ†Œμ˜ 쑴재 μ—¬λΆ€λ₯Ό λ¨Όμ € ν™•μΈν•˜κ³  ν™•μΈλ˜μ—ˆμ„ 경우, 데이터λ₯Ό ν™œμš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

var mySet: Set<String> = ["apple", "banana", "orange"]

// "apple"μ΄λΌλŠ” 데이터가 Set에 μ‘΄μž¬ν•˜λŠ”μ§€ 확인
if mySet.contains("apple") {
    print("Set contains apple")
    // "apple"μ΄λΌλŠ” 데이터λ₯Ό κ°€μ Έμ™€μ„œ μ‚¬μš©
    let apple = mySet.filter { $0 == "apple" }
    print("Apple: \(apple)")
}

4. μ„±λŠ₯

  • Array: 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터에 μ ‘κ·Όν•˜λ―€λ‘œ, 인덱슀λ₯Ό μ•Œκ³  μžˆμ„ 경우 데이터λ₯Ό λΉ λ₯΄κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ°°μ—΄μ˜ 쀑간에 μžˆλŠ” 데이터λ₯Ό μ‚­μ œν•˜κ±°λ‚˜ μ‚½μž…ν•˜λŠ” 경우, λͺ¨λ“  데이터λ₯Ό 이동해야 ν•˜λ―€λ‘œ μ„±λŠ₯에 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.
  • Set: λ°μ΄ν„°μ˜ μˆœμ„œκ°€ μ—†μœΌλ―€λ‘œ, 인덱슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό κ²€μƒ‰ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ 쀑볡 데이터λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ, 쀑볡 검사λ₯Ό ν•  ν•„μš”κ°€ μ—†μ–΄μ„œ 검색 속도가 λΉ λ¦…λ‹ˆλ‹€.
  • Dictionary: ν‚€λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터에 μ ‘κ·Όν•˜λ―€λ‘œ, ν‚€λ₯Ό μ•Œκ³  μžˆμ„ 경우 데이터λ₯Ό λΉ λ₯΄κ²Œ 찾을 수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λͺ¨λ“  ν‚€λ₯Ό κ²€μƒ‰ν•˜λŠ” 경우, μˆœνšŒν•΄μ•Ό ν•˜λ―€λ‘œ μ„±λŠ₯에 영ν–₯을 λ―ΈμΉ©λ‹ˆλ‹€.

 

μ˜€λŠ˜μ€ Collection νƒ€μž…μ— λŒ€ν•΄μ„œ 정리해 λ΄€μŠ΅λ‹ˆλ‹€~

 

그럼 이만 πŸ‘‹πŸ» πŸ‘‹πŸ» πŸ‘‹πŸ»

λ°˜μ‘ν˜•