View

300x250

[iOS 앱 개발 - Swift] Codable과 CodingKey, JsonEncoder와 JsonDecoder

객체를 저장하고 파일로 만들 때, 그 자체를 코드화를 하면 저장공간을 비효율적으로 사용하게되고, 검색등으로 찾거나 처리를 할 때 시간이 더 소요되고, 보안적인 문제가 발생할 수도 있습니다. 정보를 효율적이고 안전하게 저장하기 위해서 인코딩 (Encoding) 과정을 거쳐, 정보를 표준화 및 암호화합니다. 이 데이터를 다시 원래 객체의 모습으로 돌리는 과정을 디코딩(Decoding) 이라고 합니다.

 

 

Swift 에서는 인코딩과 디코딩을 위한 프로토콜 ( Encodable, Decodable) 을 이미 만들어두었습니다. 보통 두 프로토콜이 함께 쓰이기때문에, 둘을 함께 엮은 Codable 프로토콜을 사용해주면 됩니다.

Codable Protocol

다음의 데이터를 다른 형식으로 만들어 저장하고자 한다면, Codable 이라는 프로토콜을 따르게 해주면 됩니다. 일반적으로 Swift의 대부분의 자료형은 Codable 프로토콜을 준수하기 때문에, 따로 선언이 필요없이 Codable 프로토콜의 채택이 가능합니다.

 

 

만약 새로운 구조체나 자료형을 만들어 사용하더라도, 하위 자료형이 모두 Codable 프로토콜을 준수하는 타입이라면 Codable 프로토콜을 채택할 수 있습니다.

 

CodingKey

JSON 형태의 데이터로 변환하고자 하면, 기본적으로는 JSON 타입의 키(Key)와 사용자가 정의한 프로퍼티가 일치해야 합니다. 이때 Key와 프로퍼티의 이름을 다르게 사용하고 싶다면, 타입 내부에 CodingKeys라는 String 타입의 열거형을 선언 및 CodingKey 프로토콜을 준수하게 만들면 됩니다.

 

 

JSON이란 뭘까?

편히 읽으면 제이슨. 이는 JavaScript Object Notation, 자바스크립트에서 객체를 표기하는 방법입니다. 속성 - 값 쌍( name : Amoled )으로 데이터를 저장 및 전달할 수 있는데, 텍스트로 구성되어있어 사람과 기계 모두 작성하거나 읽기 쉽고 프로그래밍 언어에 구애받지 않아 서로 다른 시스템끼리 데이터를 교환할 수 있습니다. 또한, 배열이나 객체안에 객체를 담는 계층관계 등을 간단히 표현할 수 있어서 유용하게 활용됩니다.

{
    "회사": [
        {
           "이름": "Apple",
           "운영체제": [
               "macOS",
               "iOS"
           ]
        },
        {
           "이름": "Microsoft",
           "운영체제": [
               "DOS",
               "Windows"
           ]
        }
    ]
}

JSONEncoder

Codable 프로토콜을 준수하는 객체를 JSON 형식으로 만드는 방법을 알아봅시다.

위에서 설명한 것 처럼, Codable ( 정확히는 Encodable 이겠네요 ) 프로토콜을 준수하는 객체를 만들어줍니다. 요녀석에 대한 정보를 json 파일화 할 거예요.

 

JSONEncoder() 메서드로 jsonEncoder를 하나 선언해주고, outputFormatting을 선택해줍니다. (prettyPrinted, sortedKeys 등이 있습니다) 그리고 jsonEncoder.encode(object) 로 json 파일로 변환을 시도하면 됩니다. 크게 어렵지는 않죠? 이렇게 저장하면 위의 객체는 아래와 같은 텍스트파일로 변환되게 됩니다.

 

 

JSONDecoder

이번에는 json 텍스트형식으로 데이터를 전달해 객체를 생성해봅시다. Encoder 를 만들었던 과정와 완전 똑같아요!

Swift4 부터는 """ """ 으로 여러줄의 문자열을 한번에 입력할 수 있다고 합니다. 요거 되게 신기하네요 ㅋㅋㅋㅋ

객체에 대한 json파일을 문자열로 가져와서 생성한 Decoder에 전달해주면 객체를 생성해줍니다! So Simple!!

 

 

이에 대한 결과로 아래 코드를 받을 수 있습니다!

 

 

다음 포스팅에서 JSON 데이터를 앱내에서 다루는 방법에 대해 작성하도록 하겠습니다!


이 포스팅은 edwith 의 부스트코스 iOS 프로그래밍 강좌를 들으며 공부한 내용을 정리하는 글입니다. 

전체강의와 강의자료가 무료로 개방되어있고, 네이버 아이디로도 강의를 들을 수 있어서 iOS 개발에 입문을 하고자 하는 사람이라면 부담없이 들어볼만한 강의라고 생각합니다! 각 챕터마다 프로젝트로 앱을 직접 만들면서 공부를 하기 때문에, Swift 언어 뿐만아니라 Xcode를 다루는 방법이나 개발에 대한 지식도 어느정도 함께 배워갈 수 있기 때문에, 이 강의를 들으면서 공부하는 걸 정말 추천해요!

 

혹시 관심이 있으신 분이 있다면 아래 링크를 확인해주세용!

https://www.edwith.org/boostcourse-ios/

 

[부스트코스] iOS 프로그래밍 강좌소개 : edwith

- 부스트코스

www.edwith.org

 

320x100
Share Link
reply
반응형
«   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