(Swift) CodingKey 란? (keyNotFound error..)

치타·2023년 8월 28일
1

Swift

목록 보기
3/3
post-thumbnail

CodingKey란?

인코딩 및 디코딩을 위한 키로 사용할 수 있는 타입 프로토콜이다.
쉽게 말하면 JSON 과 같은 형태의 데이터를 Swift 객체로 파싱할 때 KEY 값을 지정해줄 수 있는 타입인 프로토콜이다.
(protocol 설명은 곧..작성 예정)

아래 데이터는 { key : value } 로 이루어진 JSON 형식 데이터이다.

{
 "name" : "JESSIE",
 "age" : "15",
 "birth_date" : "2008년 08월 24일"
}

아래 코드는 Swift 의 Student 객체이다.

struct Student: Codable {
	let name: String
    var age : String
    let birthDate : String
}

위 JSON 데이터를 위 Swift 의 Student 객체에 파싱하려고 할 때 정상적으로 파싱이 될까?
정답은 NO!!

JSON 데이터의 key 값과 객체의 변수명이 일치해야 정상적으로 파싱이 된다.

잘못된 key 값으로 Decode 시 keyNopFound 에러가 발생한다.

  • JSON 데이터 : birth_date
  • Swift 객체 : birhDate

Swift.DecodingError.keyNotFound(SwiftPratice.Person.(CodingKeys in….)

Swift 개발 시 기본적으로 사용하는 단어표기법은 camel case(ex: birthDate)인데(프로젝트에 따라 다를 수도 있다..)
보통 dataBase 컬럼 정의 시에는 snake case(birth_date)를 보통으로 사용하기도 하고, 각 언어의 성격에 따라 변수 네이밍이 다를 수 있기 때문에 key값을 필히 확인하고 파싱해주어야 한다!!

이러한 상황에서 사용하는 것이 CodingKey 이다.

struct Student: Codable {
	let name: String
    var age : String
    let birthDate : String
    
    enum codingKeys: String, CodingKey {
    	case name,
        case age,
        case birthDate = "birth_date"
    }
}

CodingKey 는 String(문자열)으로 된 key 값을 따로 명시하여 데이터 파싱이 정상적으로 될 수 있도록 해준다.

Student 라는 객체에 데이터를 파싱할 때 key 값은 String 이므로 rawValue 가 String 임을 명시해주고, CodingKey 프로토콜을 채택하여 key 를 codingKeys enum 과 파싱하도록 해주면 끝!

CodingKey 이렇게 간단하게 사용할 수 있습니다 ^__^

profile
iOS 주니어개발자

0개의 댓글