티스토리 뷰

Swift + iOS/iOS

[ios] Codable을 이용한 데이터 저장

군옥수수수 2017. 12. 26. 23:41

Codable을 이용한 데이터 저장


안녕하세요. 지난 포스팅에서는 사용자 정의 타입을 저장하고 불러오기 위해 저정하고 불러오기 전 NSCodingNSKeyed(Un)Archiver를 이용해 아카이빙/언아카이빙을 하는 방법을 알아보았습니다.

 

 하지만 포스팅의 마지막에도 언급했듯이 모든 프로퍼티에 대해 인코딩과 디코딩을 설정해주어야 하기 때문에 프로퍼티가 많아지게 되면 상당히 번거로운 작업이 될 수 있다는 단점을 언급했습니다. 오늘은 이러한 번거로운 점을 보완하기 위해 Swift4에 새로 등장한 Codable이란 프로토콜에 대해 간단히 알아보고 사용해보는 시간을 갖도록 하겠습니다.


Codable

CodableEncodableDecodable로 이루어져 있습니다.


단어 뜻 그대로 Encodable은 인코딩을 할 때 Decodable은 디코딩을 할 때 사용합니다. 그리고 두 기능을 모두 사용하기 위해서는 Codable을 사용합니다. Swfit4에서는 Built-in 타입들은 기본적으로 Codable 프로토콜을 따르고 있습니다. 그리고 ArrayDictionary 같은 타입도 기본적인 타입들로 구성되어 있다면 따로 프로토콜을 선언하지 않아도 기본적으로 인코딩과 디코딩이 가능합니다.

 

하지만 예제 어플리케이션에서 저장할 ToDO 클래스와 같이 사용자 정의 타입은 Codable을 따르지 않기 떄문에 프로토콜을 선언해주어야 합니다.


  • 프로퍼티들이 모두 기본적으로 Codable을 준수하고 있기 때문에 직접 만든 Friend 클래스만 Codable을 준수한다고 명시만 하면 됩니다.

모든 타입들에 대해 인코딩과 디코딩 작업을 직접 구현해저야 했던 NSCoding에 비해 무척이나 간단해졌습니다.

 Encode & Decode

그럼 이제 본격적으로 데이터를 저장하고 불러오도록 하겠습니다.


  1. UserDefaults를 사용해 PropertyList.plist에 데이터를 저장하는 것입니다.
  2. 저장할 때 사용한 Key 값을 사용해 데이터를 불러오고 불러온 데이터는 Data 타입이기 때문에 캐스팅을 해줍니다. 그리고 원하는 타입으로 (여기서는 [ToDo] ) 디코딩을 진행합니다. 여기서 [ToDo]가 아닌 [ToDo].self를 하는 이유는 [ToDo] 타입의 변수를 넘기는 것이 아닌 타입 자체의 값, 즉 Metatype을 넘기는 것이기 때문에 [ToDo].self를 넘겨줍니다.

마무리

오늘은 이렇게 간단하게 사용자 정의 타입을 저장하기 위한 Codable에 대해 알아보았습니다. 사실 Codable은 JSON을 인코딩하고 디코딩하는데 더욱 많이 사용됩니다. 이렇게 Swift와 iOS에서 JSON을 다루는 방법에 대해서는 추후에 제가 공부를 한 후 관련 포스팅을 통해 찾아뵙도록 하겠습니다. 감사합니다.


참고자료


  1. Using Swift Codable With Property Lists
  2. Swift 4's Codable
  3. Codable in Swift 4.0
  4. Everything about Codable in Swift4


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함