ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [iOS] CodingKey λž€?
    iOS/🍎 Documentation 2021. 5. 25. 01:34

    μ„ μˆ˜ 지식 : Codable

     

    μ•ˆλ…•ν•˜μ„Έμš”πŸΆ

    μ˜€λŠ˜μ€ Codable ν”„λ‘œν† μ½œμ—μ„œ μ»€μŠ€ν…€ ν‚€ 맀핑 λ“±μ˜ μš©λ„λ‘œ μ‚¬μš©ν•˜λŠ” CodingKey ν”„λ‘œν† μ½œμ— λŒ€ν•˜μ—¬ 닀루어 보렀고 ν•©λ‹ˆλ‹€.

     

    곡식 λ¬Έμ„œλ₯Ό μ‚΄νŽ΄λ³΄λ˜ 쀑 이 ν”„λ‘œν† μ½œμ— λŒ€ν•œ μ„€λͺ…이 λ‚˜μ™€μžˆμ–΄ 이것을 μ •λ¦¬ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

    막상 CodingKey λ¬Έμ„œμ—λŠ” μ„€λͺ…이 μ „ν˜€ μ—†μ—ˆλ˜...

    struct Coordinate: Codable {
        var latitude: Double
        var longitude: Double
        var elevation: Double
    
        enum CodingKeys: String, CodingKey {
            case latitude
            case longitude
            case elevation
        }
    }

     

    μœ„ μ½”λ“œμ™€ 같이, Codable νƒ€μž…μ€ CodingKeys λΌλŠ” 이름을 가진 νŠΉλ³„ν•œ nested μ—΄κ±°ν˜• μ„ μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    그리고 이 μ—΄κ±°ν˜•μ€ CodingKey ν”„λ‘œν† μ½œμ„ μ±„μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. 

     

    ❗️CodingKeys μ—΄κ±°ν˜•μ€ CodingKey ν”„λ‘œν† μ½œμ„ 채택해야 ν•œλ‹€. 철자 's' ν•˜λ‚˜ μ°¨μ΄μ΄λ‹ˆ 잘 κ΅¬λΆ„ν•΄μ£Όμ„Έμš”!

     

    Codable 을 μ±„μš©ν•œ νƒ€μž…μ— 이 μ—΄κ±°ν˜•(CodingKeys) 이 μ‘΄μž¬ν•œλ‹€λ©΄, 이 μ—΄κ²¨ν˜•μ€ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€κ°€ 인코딩 ν˜Ήμ€ λ””μ½”λ”© 될 λ•Œ 이 μ—΄κ±°ν˜•μ˜ case λ¦¬μŠ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” 속성듀이 μ „λΆ€ μžˆμ–΄μ•Ό ν•œλ‹€κ³  μ„ μ–Έν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

     

    μ—΄κ±°ν˜• case λ“€μ˜ 이름은 인코딩 ν˜Ήμ€ λ””μ½”λ”© λ˜λŠ” νƒ€μž…μ˜ μ†μ„±μ˜ 이름과 각각 λͺ¨λ‘ λ§€μΉ­λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

     

    λ§Œμ•½ λ””μ½”λ”©ν•˜λŠ” μΈμŠ€ν„΄μŠ€μ— λ“±μž₯ν•˜μ§€ μ•Šκ±°λ‚˜,

    예λ₯Ό λ“€μ–΄ λ””μ½”λ”©ν•˜λŠ” λ°μ΄ν„°μ—λŠ” 'abc'λΌλŠ” μ΄λ¦„μ˜ 속성이 μ—†λŠ”λ°, CodingKeys μ—΄κ±°ν˜•μ— μΆ”κ°€ν•˜μ—¬ 디코딩을 μ‹œλ„ν•  μ΄μœ κ°€ μ—†μŠ΅λ‹ˆλ‹€.

     

    μΈμ½”λ”©ν•΄μ•Όν•˜λŠ” ν‘œν˜„μ— ν¬ν•¨λ˜μ§€ μ•Šμ•„μ•Όν•  속성이라면 CodingKeys μ—΄κ±°ν˜•μ—μ„œ μ œμ™Έν•˜λ©΄ λ©λ‹ˆλ‹€.

    인코딩할 데이터에 μΆ”κ°€ν•˜κ³  싢지 μ•ŠλŠ” 속성이라면 λ˜ν•œ CodignKeys  μ—μ„œ μ œμ™Έν•˜λ©΄ λ©λ‹ˆλ‹€.

     

    πŸ’‘ μΈμ½”λ”©μ—μ„œλŠ” ν•„μš” μ—†λŠ” 속성 인데, λ””μ½”λ”©μ—μ„œλŠ” ν•„μš”ν•˜λ‹€λ©΄? Codable 을  Encodable κ³Ό Decodable 둜 λ‚˜λˆ„μ–΄ κ΅¬ν˜„ν•œλ‹€.

     

    CodingKeys μ—μ„œ μ œμ™Έλœ 속성은 κΈ°λ³Έ 값을 μ„€μ •ν•΄ λ†“μ•„μ•Όν•©λ‹ˆλ‹€. κ·Έλž˜μ•Ό Codable ν”„λ‘œν† μ½œμ˜ κΈ°λ³Έ κ΅¬ν˜„μ„ μ œκ³΅λ°›μŠ΅λ‹ˆλ‹€.

    struct Coordinate: Codable {
        var latitude: Double
        var longitude: Double
        
        // CodingKeys μ—μ„œ μ œμ™Έλ˜μ—ˆμœΌλ―€λ‘œ, κΈ°λ³Έ 값을 nil 둜 μ„€μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
        var elevation: Double?
    
        enum CodingKeys: String, CodingKey {
            case latitude
            case longitude
        }
    }

     

    λ§Œμ•½ CodingKeys μ—΄κ±°ν˜•μ˜ case 이름과 μ†μ„±μ˜ 이름이 μΌμΉ˜ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, String 을 RawValue 둜 μ‚¬μš©ν•˜μ—¬ μ œκ³΅ν•˜λ©΄ λ©λ‹ˆλ‹€.

    :: μ»€μŠ€ν…€ ν‚€ 맀핑

     

     RawValue 둜 μ œκ³΅ν•œ 값은 인코딩 κ³Ό λ””μ½”λ”© μ‹œ key 의 이름와 속성 이름을 λ§€ν•‘ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

     

    이런 μ»€μŠ€ν…€ ν‚€ 맀핑을 톡해 Swift API Design Guidelines λ₯Ό λ”°λ₯Έ 속성λͺ…을 μ‚¬μš©ν•  수 있게 λ©λ‹ˆλ‹€.

     

    λ§Œμ•½ ν‚€ 맀핑이 지원이 λ˜μ§€ μ•ŠλŠ”λ‹€λ©΄, μ™ΈλΆ€μ—μ„œ λ°›μ•„μ˜¨ swift naming convention 에 λ§žμ§€ μ•ŠλŠ” 이름듀을 속성 λͺ…μœΌλ‘œ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€.

    snake_case λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λ˜μ§€, UpperCamelCase λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λ˜μ§€...

     

     

     

    끝!


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

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

     

     

     

    μ°Έκ³  λ¬Έμ„œ: https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types

    λŒ“κΈ€

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