상세 컨텐츠

본문 제목

Guide To Swift Codable. Chapter 7: Implementing a MessagePack Encoder

TIL/Swift Codable

by box-jeon 2018. 8. 9. 04:09

본문

The problem of data serialization and interchange is much larger than requesting JSON over HTTP.


Foundation framework이 제공하고 있는 Encoder와 Decoder는 JSON과 PropertyList 뿐입니다. 보통은 JSONEncoder/JSONDecoder로 충분하겠지만, 그 외의 방식을 사용하게 될 때 우리는 Encoder를 어떻게 작성하면 되는지 설명합니다. 따라서 작성해보고 있었는데 KeyedEncodingContainerProtocol의 superEncoder()와 superEncoder(forKey:)가 무슨 기능인지, 어떻게 구현해야할지 모르겠어서 막혔습니다. Decoder는 숙제라며 소개하고 있지 않길래 거기까지 구현해보고 마무리하면 되겠구나 싶었는데, Encoder에서 이미 막혀서 약간 흥미를 잃었습니다. 찾아보니 깃헙에 Decoder까지 구현을 마쳐놓았는데, superEncoder()와 superEncoder(forKey:)는 그냥 fatalError로 처리해놓고 FIXME 주석이 달려있었습니다. 역시 존잘들은 망설임이 없네요.


https://github.com/Flight-School/MessagePack


마무리

전반적으로 아주 재미있게 읽었습니다. 프로젝트에도 조금씩 조금씩 적용 중인데요. 막상 보니까 json 내부에 jsonString을 string value로 보내오는 부분이 간혹 있어서, 고민에 빠져들고 있습니다. 애초에 그러지 말았어야 했는데 이제와서 문제제기를 하기가 쉽지 않네요. 늘 거슬렸던 required init을 final class나 struct를 이용해 extension으로 분리하는 부분도 좋았고, userInfo를 응용해서 NSManagedObject와 엮는 방법도 아주 흥미로웠습니다. type에 따라 json 구조가 바뀌는 경우를 decoding 하는 게 가장 난해한 부분이라고 생각되는데, 연습을 좀 더 필요할 것 같습니다.


Codable은 애플 엔지니어들이 투닥투닥해서 만들어낸 것인줄 알았더니 이렇게 시작이 되었었네요.

https://github.com/apple/swift-evolution/blob/master/proposals/0166-swift-archival-serialization.md

swift가 오픈소스인 걸 다시 한 번 실감하게 됩니다.

관련글 더보기

댓글 영역