Swift에서 Decodable 사용하여 JSON 데이터를 Swift 객체로 변환하기

2024. 10. 21. 19:05·Category/Swift
728x90

Decodable은 Swift에서 제공하는 프로토콜로, JSON과 같은 외부 데이터를 Swift 객체로 변환할 때 사용됩니다. 주로 API로부터 받은 JSON 데이터를 Swift 구조체나 클래스로 쉽게 변환하기 위해 사용되며, 이를 디코딩(Decoding)한다고 합니다. Decodable을 사용하면 각 속성을 일일이 매핑하지 않아도 Swift가 자동으로 데이터를 적절한 속성으로 매핑해줍니다.

Decodable의 기본 사용법

Decodable 프로토콜을 사용하려면, 먼저 디코딩하려는 Swift 구조체 또는 클래스가 Decodable 프로토콜을 채택해야 합니다.

1. 간단한 구조체 예시

struct User: Decodable {
    let id: Int
    let name: String
    let email: String
}

위와 같이 구조체가 Decodable을 채택하고 있으면, JSON 데이터를 이 구조체로 변환할 수 있습니다.

2. JSON 데이터를 Swift 객체로 변환

다음과 같은 JSON 데이터가 있다고 가정해 봅시다:

{
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
}

이 데이터를 User 구조체로 변환하기 위해 JSONDecoder를 사용합니다:

let jsonData = """
{
    "id": 1,
    "name": "John Doe",
    "email": "john@example.com"
}
""".data(using: .utf8)!

do {
    let decoder = JSONDecoder()
    let user = try decoder.decode(User.self, from: jsonData)
    print(user.name)  // 출력: John Doe
} catch {
    print("Failed to decode JSON: \(error)")
}

3. 키 매핑

JSON의 키와 Swift의 프로퍼티 이름이 다를 경우 CodingKeys라는 커스텀 열거형을 사용하여 키를 매핑할 수 있습니다.

struct User: Decodable {
    let id: Int
    let username: String
    let email: String
    
    enum CodingKeys: String, CodingKey {
        case id
        case username = "name"  // JSON의 "name" 키를 username에 매핑
        case email
    }
}

이 경우 JSON의 "name"이라는 키가 User 구조체의 username 속성으로 매핑됩니다.

4. 중첩된 데이터 디코딩

만약 JSON에 중첩된 데이터가 있을 경우, 해당 데이터 구조를 그대로 Swift 구조체로 표현하면 됩니다.

struct Address: Decodable {
    let street: String
    let city: String
}

struct User: Decodable {
    let id: Int
    let name: String
    let address: Address
}

그리고 JSON 데이터가 다음과 같이 중첩되어 있다면:

{
    "id": 1,
    "name": "John Doe",
    "address": {
        "street": "123 Main St",
        "city": "New York"
    }
}

이 데이터를 Swift 객체로 변환하면 Address 구조체가 자동으로 User 구조체 내의 address 프로퍼티에 매핑됩니다.

요약

  • Decodable: 외부 데이터(JSON 등)를 Swift 객체로 변환하기 위한 프로토콜.
  • JSONDecoder: JSON 데이터를 Swift 구조체나 클래스로 디코딩하는 데 사용.
  • CodingKeys: JSON 키와 Swift 속성 이름이 다를 때 매핑을 제공.
  • 중첩 데이터: 구조체 내부에 중첩된 데이터를 쉽게 변환 가능.

이 방식은 API로부터 JSON 데이터를 받아오는 경우 매우 편리하게 사용할 수 있습니다.

728x90

'Category > Swift' 카테고리의 다른 글

private init() 스위프트에서 생성자를 private으로 설정하기  (0) 2024.10.01
@escaping 키워드는 언제 사용할까  (0) 2024.10.01
클로저(Closure)란?  (0) 2024.10.01
'Category/Swift' 카테고리의 다른 글
  • private init() 스위프트에서 생성자를 private으로 설정하기
  • @escaping 키워드는 언제 사용할까
  • 클로저(Closure)란?
Corinee
Corinee
  • Corinee
    Coding Note
    Corinee
  • 전체
    오늘
    어제
    • 분류 전체보기 (361) N
      • Category (354)
        • Algorithm (7)
        • SQL (2)
        • Java (4)
        • C (9)
        • React (7)
        • JavaScript (9)
        • CSS (2)
        • Node (1)
        • SpringBoot (26)
        • Database (3)
        • Network (1)
        • Django (6)
        • Python (22)
        • Flask (4)
        • iOS (25)
        • Swift (4)
        • Flutter (11)
        • Dart (3)
        • Git (1)
        • Firebase (1)
        • Gof (1)
        • 정보처리기사 (112)
        • AI (5)
        • NestJs (4)
        • Docker (1)
        • 사이드 프로젝트 (1)
        • Note (80)
        • Socket (1)
        • 개인 정보 처리 방침 (1)
        • 면접 (0)
        • Vue.js (0)
      • Archive (2) N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소프트웨어 버전 관리
    core web vitals
    stdlib.h
    중첩 함수(nested function)
    시맨틱 버전(semantic versioning
    named export vs default export
    Collections
    structuredclone()
    inp
    math.h
    counter
    json.parse(json.stringify())
    useEffect
    defaultdict
    public vs assets
    semver)
    ajax (asynchronous javascript and xml)
    프로세스 강제 종료
    jackson 라이브러리
    쉽게 풀어쓴 C언어 Express
    styled-components
    react router
    mermaid-cli
    intellij 콘솔 한글 깨짐
    mcp server
    chrome extension 자동 배포
    x.y.z (메이저.마이너.패치)
    react
    Jest
    원시값(primitive)
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Corinee
Swift에서 Decodable 사용하여 JSON 데이터를 Swift 객체로 변환하기
상단으로

티스토리툴바