Codable(Encoding/Decoding)

이창형·2023년 4월 28일
0

iOS 박살내기

목록 보기
9/10
post-thumbnail

오늘은 Codable을 알아볼게요~~

Codable이란???

JSON파일을 쉽게 Encoding/Decoding하게 해줍니다.

음.. 그럼 Encoding과 Decoding은 뭐죠???

Encoding부터 알아보죠!

Encoding

원하는 struct, class, enum등의 인스턴스를 JSON 형태의 Data로 만들어 주는 것

이해가 되셨나요?

코드로 보시죠 💻


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

let changbro: Person = .init(name: "changbro", age: 27)

Codable을 이용하여 JSON 형태의 Data로 Encoding하고 싶은 경우에는 반드시 Codable이라는 Protocol을 준수하고 있어야 합니다!!(안하면 오류나요😅)

이제 encoding 시작하겠습니다 !!

let enc = try? JSONEncoder().encode(changbro)

간단하죠?? 이 Data를 String으로 변환하여 출력해보면

JSON 데이터로 만들어져 출력되는 것을 확인할 수 있습니다!

이제 Decoding을 알아보죠

Decoding

Decoding은 JSON 형태의 Data를 struct,class,enum등의 인스턴스에 자동으로 파싱해주는 것

코드를 보고 이해해보죠 !!
Encoding보다 Decoding이 더 많이 쓰입니다 ㅎㅎ

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

아까 설명드렸던 코드와 같이 Codable을 준수하는 구조체가 있습니다.
서버에서 name,age가 담긴 JSON Data를 준다고 생각해보죠

let data = """
{
    "name" : "changbro",
    "age"  : 27
}
""".data(using: .utf8)!

똑같이 한줄이면 됩니다!

let changbro = try? JSONDecoder().decode(Person.self, from: data)

출력해보면?!

원리는 JSON의 key값과 구조체의 변수 이름이 동일하면 변수의 값에 key의 value를 파싱하는 원리입니다.

하지만 예외 상황이 있겠죠??

1. key값이 다르게 올 경우(CodingKeys)

위 코드들을 예시로 key값이 name이 아니라 nickname으로 왔다고 온 경우


struct Human: Codable {
    var name: String
}
    enum CodingKeys: String, CodingKey {
        case name = "nickname"
    }
}

2. 데이터가 누락되서 온 경우

  • 변수를 옵셔널로 선언

struct Human: Codable {
    var name: String?
}

이해가 되셨나요?!

profile
iOS Developer

0개의 댓글