ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] ν”„λ‘œν† μ½œ 총정리
    iOS/🟠 Swift 2021. 5. 22. 15:11

    [ ν”„λ‘œν† μ½œ κ°œμš” ] - https://woozzang.tistory.com/44

    μš”μ•½: ν”„λ‘œν† μ½œμ€ μš”κ΅¬μ‚¬ν•­μ΄λ©°, ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ ν˜•μ‹μ€ μš”κ΅¬μ‚¬ν•­μ„ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Όν•©λ‹ˆλ‹€.

     

    [ 속성 μš”κ΅¬μ‚¬ν•­ ] - https://woozzang.tistory.com/45

    μš”μ•½: ν”„λ‘œν† μ½œμ—μ„œ 속성은 κ°€λ³€μ„±κ³Ό 상관없이 λ°˜λ“œμ‹œ var ν‚€μ›Œλ“œλ§Œ 올 수 μžˆμŠ΅λ‹ˆλ‹€.

     

    [ λ©”μ„œλ“œ μš”κ΅¬μ‚¬ν•­ ] - https://woozzang.tistory.com/48

    μš”μ•½: λ©”μ„œλ“œ μš”κ΅¬μ‚¬ν•­μ˜ κ·œμΉ™μ€ 속성 μš”κ΅¬μ‚¬ν•­κ³Ό μœ μ‚¬ν•©λ‹ˆλ‹€.

     

    [ μƒμ„±μž μš”κ΅¬μ‚¬ν•­ ] - https://woozzang.tistory.com/53

    μš”μ•½: μƒμ„±μžλŠ” 클래슀의 경우 상속에 λŒ€λΉ„ν•΄ κ΅¬ν˜„μ‹œ `required` ν‚€μ›Œλ“œλ₯Ό λΆ™μ—¬μ•Ό ν•©λ‹ˆλ‹€.


     

    [ μ„œλΈŒμŠ€ν¬λ¦½νŠΈ μš”κ΅¬μ‚¬ν•­ ]

    protocol Something {
      subscript(_: Int) -> Int { get }
    }
    
    struct Some: Something {
      subscript(index: Int) -> Int {
        <#code#>
      }
    }
    

    get set μ‘°ν•©μœΌλ‘œ μ„ μ–Έ κ°€λŠ₯ν•˜λ©° μ„œλΈŒμŠ€ν¬λ¦½νŠΈμ˜ κ΅¬ν˜„λΆ€λŠ” 계산 μ†μ„±μ˜ κ·œμΉ™μ„ λ”°λ₯΄λ―€λ‘œ 쑰합에 따라 κ΅¬ν˜„ν•΄μ£Όλ©΄ λ©λ‹ˆλ‹€.

    예λ₯Ό λ“€μ–΄ ν”„λ‘œν† μ½œμ—μ„œ get 으둜 μ„ μ–Έλœ 경우 get λ˜λŠ” get set 블둝 λͺ¨λ‘λ₯Ό κ΅¬ν˜„ν•΄μ€„ 수 μžˆλ‹€.

     

    πŸ’‘parameter name 은 μΌμΉ˜μ‹œν‚€μ§€ μ•Šμ•„λ„ μš”κ΅¬μ‚¬ν•­μ— μΆ©μ‘±λ©λ‹ˆλ‹€.


     

    [ νƒ€μž…μœΌλ‘œμ„œμ˜ ν”„λ‘œν† μ½œ ] - https://woozzang.tistory.com/54

    μš”μ•½: ν”„λ‘œν† μ½œμ€ νƒ€μž…μœΌλ‘œ μ·¨κΈ‰λ˜λ©°, First Class Citizen μž…λ‹ˆλ‹€.

     

    [ Delegation ] - https://woozzang.tistory.com/67

    μš”μ•½: Delegate νŒ¨ν„΄μ€ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•©λ‹ˆλ‹€.

     

    [ ν”„λ‘œν† μ½œ μ»΄ν¬μ§€μ…˜ ]

    & (μ•°νΌμ„Όλ“œ) 문자λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μˆ˜μ˜ ν”„λ‘œν† μ½œμ„ 합쳐 ν•˜λ‚˜μ˜ μž„μ‹œ νƒ€μž…μœΌλ‘œ μ·¨κΈ‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    λ˜ν•œ ν”„λ‘œν† μ½œκ³Ό ν΄λž˜μŠ€λ„ ν•©μΉ  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

    typealias Codable = Decodable & Encodable

    예λ₯Ό λ“€μ–΄ Codable μ΄λΌλŠ” νƒ€μž…μ€ Decodable κ³Ό  Encodable ν”„λ‘œν† μ½œμ„ λͺ¨λ‘ μ±„μš©ν•œ νƒ€μž…μ„ κ°€λ¦¬ν‚€λŠ” typealias μž…λ‹ˆλ‹€.

     

    λ‹Ήμ—°ν•˜μ§€λ§Œ ν•΄λ‹Ή νƒ€μž…μœΌλ‘œ μΊμŠ€νŒ… 되면 Decodable κ³Ό Encodable 에 μ„ μ–Έλœ λ©€λ²„μ—λ§Œ μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.


     

     

    [ Optional Requirements ] - Objective-C λŸ°νƒ€μž„ κ³Ό κ΄€λ ¨λœ λ¬Έλ²•μž…λ‹ˆλ‹€.

     

    @objc (objc attribute) 와 optional (optional modifier) 을 μ΄μš©ν•˜μ—¬ ν”„λ‘œν† μ½œμ— μ„ μ–Έλœ 멀버λ₯Ό μ„ νƒμ μœΌλ‘œ κ΅¬ν˜„ν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    @objc λž€ μŠ€μœ„ν”„νŠΈλ‘œ μž‘μ„±ν•œ μ½”λ“œλ₯Ό Objective-C λŸ°νƒ€μž„μ—μ„œ ꡬ동 κ°€λŠ₯ν•˜κ²Œ ν•΄μ£ΌλŠ” μ½”λ“œμž…λ‹ˆλ‹€.

    @objc protocol Something {
      @objc optional var test: Int {get set}
      
      @objc optional func some() -> Int
    }
    
    // μ—λŸ¬ μ•ˆλœΈ
    class Some: Something {
      
    }
    

    μœ„μ˜ μ½”λ“œμ—μ„œ Something ν”„λ‘œν† μ½œμ„ μ±„νƒν•˜μ˜€μ–΄λ„ test 속성은 μ„ νƒμ μœΌλ‘œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.

     

    λ§Œμ•½ κ΅¬ν˜„ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, optional 멀버듀은 λͺ¨λ‘ μ˜΅μ…”λ„ νƒ€μž…μœΌλ‘œ μ ‘κ·Ό κ°€λŠ₯ν•˜λ©°, 값은 nil 둜 μ΄ˆκΈ°ν™”λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.(❌ μ΄μ œλŠ” μ•ˆλ˜λŠ” λ“― )

    μ΄λ ‡κ²Œ XCodeκ°€ μ œμ‹œλŠ” ν•΄μ£Όμ§€λ§Œ, μ‹€μ œλ‘œ μž…λ ₯ν•˜λ©΄ μ—λŸ¬κ°€ λœΉλ‹ˆλ‹€.

     

     

     

    그리고 class ν˜•μ‹μ—μ„œλ§Œ 채택이 κ°€λŠ₯ν•©λ‹ˆλ‹€. ( @objc λ₯Ό μ‚¬μš©ν•˜λ©΄ AnyObject ν”„λ‘œν† μ½œμ„ μžλ™μœΌλ‘œ μƒμ†ν•©λ‹ˆλ‹€. )


     

    [ ν”„λ‘œν† μ½œ ν™•μž₯ ]

     

    ν”„λ‘œν† μ½œμ€ extension μ—μ„œ κΈ°λ³Έ κ΅¬ν˜„μ„ μΆ”κ°€ν•˜μ—¬ μ±„νƒν•œ νƒ€μž…μ—κ²Œ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

     

    κΈ°λ³Έ κ΅¬ν˜„μ΄λž€, ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ—μ„œ κ΅¬ν˜„μ„ μΆ”κ°€ν•˜μ§€ μ•Šμ„ μ‹œ 기본적으둜 μ œκ³΅λ˜λŠ” κ΅¬ν˜„μ„ κ°€λ¦¬ν‚΅λ‹ˆλ‹€.

     

    λ§Œμ•½ ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ—μ„œ 직접 κ΅¬ν˜„μ„ ν–ˆλ‹€λ©΄, κΈ°λ³Έ κ΅¬ν˜„μ„ μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

     

    λͺ¨λ“  νƒ€μž…μ— κΈ°λ³Έ κ΅¬ν˜„μ„ μ œκ³΅ν•  μˆ˜λ„ 있고, extension 뒀에 where μ ˆμ„ ν†΅ν•΄μ„œ 쑰건을 μΆ”κ°€ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

    extension Something where Self: Decodable {
    
      func print() {
      	...
      }
    }

    Something ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž… 쀑

    Decodable ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ νƒ€μž…μ—κ²Œλ§Œ  print  λ©”μ„œλ“œμ˜ κΈ°λ³Έ κ΅¬ν˜„μ„ μ œκ³΅ν•œλ‹€λŠ” μ½”λ“œμž…λ‹ˆλ‹€.

     

     

     

    끝!


    πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

    iOSλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

     

    λŒ“κΈ€

μ–΄μ œλ³΄λ‹€ λ°œμ „ν•œ λ‚˜