AirplaIN의 기능 중에는 화이트보드 오브젝트나 채팅을 전송하거나, 수신해야하는 기능이 있습니다.
이를 앱에서 다루기 위해 엔티티를 설계하고 구현하여 이용하고 있었는데요, 전송하거나 수신을 할 때 Data의 형태로 변환해야하기 때문에 Decoding과 Encoding을 하기 위해 Codable을 적용하게 되었습니다.
Codable은 자세히 보면 Encoding & Decoding 을 typealias로 재정의 되고 있습니다.
공식문서에 따르면 class나 struct, enum을 JSON데이터로 간편하고 쉽게 Encoding, Decoding을 할 수 있게 해줍니다.
한마디로 Encodable과 Decodable을 모두 채택한 Protocol이라고 볼 수 있습니다.
Codable | Apple Developer Documentation
Encodable을 먼저 다뤄보자면, JSONEncoding이란 원하는 class, struct, enum타입의 데이터를 JSON 형태의 Data로 만드는 것입니다.
실제로 우리 앱에서 오브젝트와 채팅을 보낼 때 Data형태로 보내야 하기 때문에 해당 타입들을 Encoding해야하는 것이다.
Encodable을 채택하기 위해서는 내부 속성들도 모두 Encodable을 채택하고 있어야 한다!
그렇다면 간단하게 Encodable을 채택하여 줌으로써 해당 객체를 JSONEncoding으로 Encdoing이 가능해 지는데요,
아래 예시를 이용 해 보도록 해보겠습니다.
class WhiteboardObject: Encodable {
public let name: String
init(name: String) {
self.name = name
}
}
String은 Encodable을 채택하고 있기 때문에, WhiteboardObject도 Encodable을 채택 해줄 수 있고, 채택 해주기만 하면 Encoding이 가능하게 됩니다!