250x250
반응형
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

스윞한 개발자

Swift 기초 문법 - 코더블 Codable 본문

Swift 이론

Swift 기초 문법 - 코더블 Codable

스윞남 2024. 1. 25. 19:12
728x90
반응형
SMALL

이번 포스팅에서는 코더블에 대해서 포스팅 해보겠습니다!

 

 

 

Codable은 Swift에서 데이터를 쉽게 인코딩(직렬화)하고 디코딩(역직렬화)할 수 있게 해주는 프로토콜입니다. CodableEncodableDecodable 프로토콜을 함께 묶은 것입니다. 즉, Codable을 채택한 타입은 데이터를 JSON 또는 다른 형식으로 인코딩하거나 디코딩할 수 있습니다!

 

Codable을 채택한 타입은 JSON, Property List 및 다른 형식의 데이터를 쉽게 변환하고 다룰 수 있습니다.

 

Codable을 채택하는 방법:

타입을 Codable로 만들려면 해당 타입의 프로퍼티들이 Encodable Decodable 프로토콜을 따라야 합니다.

1. Encodable

 

Encodable은 타입을 인코딩할 수 있는 기능을 제공합니다. 이 프로토콜을 준수하는 타입은 JSON이나 다른 형식으로 인코딩될 수 있습니다.


// encode = 제이슨으로 만들기

 

let person = Person(name: "John", age: 25)

// 인코딩 (Codable -> Data)
do {
    let encoder = JSONEncoder()
    let jsonData = try encoder.encode(person)
    print(String(data: jsonData, encoding: .utf8)!)
} catch {
    print("Encoding error: \(error.localizedDescription)")
}

// 디코딩 (Data -> Codable)
let jsonString = """
    {"name":"Jane","age":30}
"""

do {
    let decoder = JSONDecoder()
    let decodedPerson = try decoder.decode(Person.self, from: jsonString.data(using: .utf8)!)
    print(decodedPerson)
} catch {
    print("Decoding error: \(error.localizedDescription)")
}

 

2. Decodable

 

Decodable은 타입을 디코딩할 수 있는 기능을 제공합니다. 
// decode = 제이슨을 클래스, 스트럭트 바꾸기

3. Codable

 

 

struct Person: Codable {
    var name: String
    var age: Int
}

위의 코드에서 Person 구조체는 Codable을 채택하였기 때문에 인코딩 및 디코딩이 가능한 타입이 됩니다!

 

 

Codable은 Encodable, Decodable 프로토콜을 모두 채택한 것으로, 타입이 인코딩 및 디코딩 양쪽에서 모두 사용될 수 있음을 의미합니다.

 

struct Person: Codable {
    var name: String
    var age: Int
}
let person = Person(name: "Alice", age: 30)

>> // Encoding (인코딩)
let encoder = JSONEncoder()
if let encodedData = try? encoder.encode(person) {
    if let jsonString = String(data: encodedData, encoding: .utf8) {
        print(jsonString)
    }
}
>> // Decoding (디코딩)
let json = """
{
    "name": "Bob",
    "age": 25
}
"""
let jsonData = Data(json.utf8)
let decoder = JSONDecoder()
if let decodedPerson = try? decoder.decode(Person.self, from: jsonData) {
    print(decodedPerson.name) // "Bob"
    print(decodedPerson.age) // 25
}

 

 

 

참고(출처) : 개발하는 정대리, 야곰(Swift5)

728x90
반응형
LIST