4/27 μ§ννλ μ€μννΈ λ°μ΄ν° ꡬ쑰μ μκ³ λ¦¬μ¦ μ± μ 2μ₯ 'μ€μννΈ κΈ°λ³Έ λ°μ΄ν° ꡬ쑰μ νμ©' μ€ν°λ μ 리μ λλ€! 맀주 μ€ν°λλ₯Ό μ§ννλ©΄μ λ΄μ© 곡μ μ μμ λ νμ΅νμ§λ§ ν¬μ€ν μ΄ λ°λ¦¬κ² λμλ€μ .. π
π 2μ₯ μμ½
2μ₯μμλ Swift μ νμ€ λΌμ΄λΈλ¬λ¦¬λ₯Ό κΈ°λ°μΌλ‘ λ°μ΄ν° ꡬ쑰λ₯Ό μ€λͺ νκ³ μμ΅λλ€.
ν¬κ²λ λ€μ μ£Όμ λ‘ λλ©λλ€! κ°κ° μ 리ν ν¬μ€ν λ§ν¬λ₯Ό λ¨κ²¨λκ²μ~
- Swift μ ꡬ쑰체 vs ν΄λμ€, Swift νμ€ λΌμ΄λΈλ¬λ¦¬μ μ μλ νμ λλΆλΆμ μ ꡬ쑰체μΌκΉ?
- λ°°μ΄, λμ λ리, μΈνΈ, ννμ κ°λ κ³Ό μ΄κΈ°ν, νμ© λ¬Έλ²
- Protocol μ§ν₯ νλ‘κ·Έλλ°μ λν΄
π 컬λ μ νμ (Collection Type)
컬λ μ νμ μ μ¬λ¬ κ°μ μ μ₯ν μ μλ ννλ‘, Swift μ ꡬνλ 컬λ μ νμ μ Array, Dictionary, Set κ° μμ΅λλ€. Tuple μ 컬λ μ νμ μ μλμ§λ§, μ μ¬ν λ°©μμΌλ‘ νμ©λ©λλ€!
- λ°°μ΄(Array) : μμλ₯Ό κ°μ§λ©°, λμΌ νμ μ κ°μ λͺ©λ‘μΌλ‘ μ μ₯νλ 컬λ μ
- λμ λ리(Dictionary; μ¬μ ν) : λμΌν λ°μ΄ν° νμ μ΄ Key: Value μμΌλ‘ λ¬ΆμΈ μμκ° μλ 컬λ μ , μ¬μ κ³Ό λΉμ·ν ꡬ쑰
- μ§ν©(Set) : nil μ΄ ν¬ν¨λμ§ μκ³ μλ‘ μ€λ³΅λμ§ μλ κ°μΌλ‘ ꡬμ±λ μμκ° μλ 컬λ μ , μνμμμ μ§ν© κ°λ μ κΈ°λ°μΌλ‘ λ§λ νμ
- νν(Tuple) : λ€μν λ°μ΄ν° νμ μ κ°μ λ΄μ μ μλ νμ (λ΄λΆ μμκ° λͺ¨λ κ°μ νμ μ΄ μλμ΄λ λ¨), μ°κ΄ κ°μ μμ κ·Έλ£Ήμ λ§λλλ° μ¬μ© (ν¨μμΈμ, λ°νκ° λ±)
π€ μ΄λ €μ λ λΆλΆ
1. ν΄λΉ μ± μ΄ λ°νλ λ μ―€ Objective-C μμ Swift λ‘ λμ΄κ°λ μμ μ΄λΌ κ·Έλ°μ§, Objective-C μμ λΈλ¦Ώμ§μ λν λ΄μ©κ³Ό λ¬Έλ²μ λν λ΄μ©μ΄ λ§μμ μ΄ν΄κ° μ΄λ €μ λ€.
2. Dictionary μ Key μ Set μ κ°μ Hashable νλ‘ν μ½μ λ§μ‘±ν΄μΌνλ€. λΌλ μ μμμ Hashable κ°λ μ΄ ν·κ°λ Έλ€.
3. λ°°μ΄μ 볡μ¬νλ κ²½μ° Copy-on-Write κΈ°λ₯μ΄ νμ©λλ€. μμ Copy-on-Write (CoW) κ°λ μ μ²μ λ€μ΄λ΄ μ΄λ €μ λ€.
4. λ°μ΄ν° ꡬ쑰μμ κ°μ μ½μ , μμ μ λΉ μ€ ννλ²μ μ¬μ©νλλ°, μ΄μ λν μ μκ° ν·κ°λ Έλ€.
π‘ ν΄κ²°ν λ°©λ² / μΆκ° νμ΅
1. Objective-C μ Swift λ°μ΄ν° νμ κ° λΈλ¦Ώμ§
Objective-C μμμ λ°°μ΄, λμ λ리, μΈνΈλ NSArray, NSDictionary, NSSet νμ μ΄κ³ , Swift μμλ Arary, Dictionary, Set νμ μ΄λ€. Swift μμλ NS[Type] <-> [Type] κ° λΈλ¦Ώμ§μ μ§μνλ€. ContiguousArray μ κ²½μ° Objective-C μμ λΈλ¦Ώμ§μ΄ μλλ€.
2. Hashable νλ‘ν μ½
Hashable μ λν κ°λ¨ν λ»μ "μ μΌνκ² νν κ°λ₯ν κ°μ μ 곡νλ€(κ°μ΄ μ λν¬νλ€), κ²μμ΄ μ©μ΄νλ€" λ‘ μ΄ν΄νλ€.
Hashable νλ‘ν μ½μ μ€μνλ€λ λ»μ hash λ μ μλ νμ μΈ κ²μ΄λ€. hash λ μ μλ€λ λ»μ hash ν¨μμ μ μ©ν μ μλ€λ λ»μ΄λ©°, μμμ κΈΈμ΄μ λ°μ΄ν°λ₯Ό μ μΌνκ² νν κ°λ₯ν κ³ μ λ κΈΈμ΄μ λ°μ΄ν°λ‘ λ°κΏ μ μλ€λ λ»μ΄λ€.
Hashable νλ‘ν μ½μ Equatable μ μμν νλ‘ν μ½μ΄κ³ , μ€μννΈμ λͺ¨λ κΈ°λ³Έ νμ (Int, Double ..) μ Hashable νλ‘ν μ½μ λ°λ₯΄λλ‘ μ€κ³λλ€.
π Dictionary μ Key μ Set μ κ°μ μ Hashable ν΄μΌν κΉ?
ν΄μν¨μλ μμμ κΈΈμ΄μ λ°μ΄ν°λ₯Ό κ³ μ λ κΈΈμ΄μ λ°μ΄ν°λ‘ 맀ννλ ν¨μμ΄λ€. ν΄μν¨μλ ν΄μν μ΄λΈμ΄λΌλ μλ£κ΅¬μ‘°μ μ΄μ©λλ©°, ν΄μν¨μλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ₯/μμ /μ‘°νμ νκ· μκ°λ³΅μ‘λλ O(1) λ‘ λ§€μ° λΉ λ₯΄κ² μλλλ€.
Dictionary μ Key μ Set μλ μμκ° μκΈ° λλ¬Έμ, hashable ν νμ μ΄μ΄μΌ μμλ₯Ό λΉ λ₯΄κ² μ°Ύμ μ μκΈ° λλ¬Έμ΄λ€. hashable νλ‘ν μ½μ μ μλ "μ μ hash κ°μ μ 곡νλ νμ " μ΄λ―λ‘, μ μ hash κ° μμ΄ μμλ₯Ό λΉ λ₯΄κ² μ°Ύμ μ μκ² λλ κ²μ΄λ€.
3. Copy-on-Write (CoW)
νΉμ μΈμ€ν΄μ€λ₯Ό 볡μ¬ν κ²½μ°, μμ (Write)μ΄ μΌμ΄λ λ 볡μ¬(Copy)νλ€λ λ»μ΄λ€.
μ€μννΈμ Collection Type μΈ Array, Dictionary, Set μμ μλ³Έ 리μμ€λ₯Ό 볡μ¬ν λ μ μ©λλ€.
* μ¬μ©μ μ μ ꡬ쑰체μμλ CoW κ°λ μ μ μ©ν μ μλ€.
μλ³Έμ΄λ 볡μ¬λ³Έμ΄ μμ λκΈ° μ κΉμ§λ 볡μ¬λ₯Ό νμ§ μκ³ , μλ³Έ 리μμ€λ₯Ό 곡μ νλ€.
μλ³Έμ΄λ 볡μ¬λ³Έμμ μμ μ΄ μΌμ΄λ κ²½μ°, κ·Έ λ 볡μ¬νλ μμ μ νλ€.
=> μμ νμ§ μλ κ²½μ°μλ μλ³Έ 리μμ€λ₯Ό μ°Έμ‘°νμ¬ λΆνμν λ©λͺ¨λ¦¬ μ¬μ©κ³Ό μκ°μ μ€μ΄κΈ° μν¨μ΄λ€.
4. λΉ μ€ ννλ² Big-O
Big-O λ ν¨μμ μ κ·Όμ λΆμμ νννλ κ°μ₯ λνμ μΈ λ°©λ² μ€ νλμ΄λ€.
* μ κ·Όμ λΆμ (asymptotic analysis) λ 무νλμ κ°κΉμ΄ μ λ ₯κ°μ λΆμνλ λ° κ±Έλ¦¬λ μκ°μ μΈ‘μ νλ λ°©λ²μ΄λ€.
=> Big-O λ 무νλμ κ°κΉμ΄ μ λ ₯κ°μ λΆμνλλ° κ±Έλ¦¬λ μκ°μ μΈ‘μ νκ³ νννλ λνμ μΈ λ°©λ² μ€ νλμ΄λ€.
Big-O λ μκ³ λ¦¬μ¦ ννμμ μμλ₯Ό κ°μΆ€μΌλ‘μ¨ μ’ λ κ°νΈνκ² μ€ν μλλ₯Ό μΈ‘μ ν μ μλ€.
- μ€ν μκ°μ΄ 3n + 5 ⇒ λΉ μ€ O(n)
- μ€ν μκ°μ΄ n^2 + 10n + 33 ⇒ O(n^2)
- μ€ν μκ°μ΄ 100n^5 + n^3 + 2 ⇒ O(n^5)
Hashable μ°Έκ³ λ§ν¬
- https://developer.apple.com/documentation/swift/hashable
- https://www.zehye.kr/swift/2020/07/22/swift_hashable/
- https://mangkyu.tistory.com/102
Copy-on-Write μ°Έκ³ λ§ν¬