0Pricing
Swift Academy · 강의

Codable 따르기

형식이 자동으로 인코딩 및 디코딩되도록 합니다.

Codable 따르기은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

인코딩·디코딩 가능 형식이란?

Codable은 Encodable & Decodable의 타입 별칭입니다. 타입이 이를 준수하면 스위프트가 인스턴스를 JSON과 같은 외부 데이터로 변환하고 다시 복원할 수 있으므로 수동으로 구문 분석 코드를 작성할 필요가 없습니다.

import Foundation

struct Book: Codable {
    var title: String
    var pages: Int
}

print("Book conforms to Codable")

자동 합성

모든 저장 프로퍼티가 그 자체로 Codable이라면, 컴파일러가 인코딩 및 디코딩 로직을 대신 합성해 줍니다. 프로퍼티 목록만 작성하면 나머지는 Swift가 채웁니다.

import Foundation

struct User: Codable {
    var name: String
    var age: Int
    var isActive: Bool
}

let u = User(name: "Ada", age: 36, isActive: true)
print(u)

JSON 데이터로 인코딩

Codable 값은 JSONEncoder에 전달할 수 있으며, 그러면 Data 덩어리가 생성됩니다. JSON 텍스트를 확인하려면 해당 Data를 String으로 변환합니다.

import Foundation

struct User: Codable {
    var name: String
    var age: Int
}

let u = User(name: "Ada", age: 36)
let data = try JSONEncoder().encode(u)
print(String(data: data, encoding: .utf8)!)

JSON 데이터에서 디코딩

반대 과정에서는 JSONDecoder를 사용합니다. 대상 타입과 원본 Data를 전달하면 완전한 타입 지정 Swift 값으로 복원합니다.

import Foundation

struct User: Codable {
    var name: String
    var age: Int
}

let json = "{\"name\":\"Ada\",\"age\":36}"
let data = json.data(using: .utf8)!
let u = try JSONDecoder().decode(User.self, from: data)
print(u.name, u.age)

값 왕복 처리

인코딩한 다음 디코딩하면 동일한 값이 다시 나와야 합니다. 이 왕복 처리는 타입의 Codable 준수가 예상대로 작동하는지 빠르게 확인하는 방법입니다.

import Foundation

struct Point: Codable {
    var x: Int
    var y: Int
}

let p = Point(x: 3, y: 7)
let data = try JSONEncoder().encode(p)
let back = try JSONDecoder().decode(Point.self, from: data)
print(back.x, back.y)

Encodable만 사용하기

한쪽 기능만 준수하도록 만들 수도 있습니다. Encodable은 타입을 외부 형식으로 기록할 수 있지만 다시 읽어 올 수는 없다는 뜻으로, 파싱할 필요가 전혀 없는 응답 모델에 유용합니다.

import Foundation

struct Receipt: Encodable {
    var item: String
    var total: Double
}

let r = Receipt(item: "Coffee", total: 4.5)
let data = try JSONEncoder().encode(r)
print(String(data: data, encoding: .utf8)!)

Decodable만 사용하기

마찬가지로 Decodable을 사용하면 인코딩하지 않고도 외부 데이터로부터 타입을 만들 수 있습니다. 읽기 전용 API 페이로드를 받아 사용하기만 할 때 유용합니다.

import Foundation

struct Config: Decodable {
    var version: Int
    var debug: Bool
}

let json = "{\"version\":2,\"debug\":true}"
let data = json.data(using: .utf8)!
let c = try JSONDecoder().decode(Config.self, from: data)
print(c.version, c.debug)

지원되는 프로퍼티 타입

String, Int, Double, Bool, Date, Data, URL 같은 표준 라이브러리 타입과 Codable 요소로 이루어진 배열 및 사전은 모두 기본적으로 Codable입니다.

import Foundation

struct Profile: Codable {
    var name: String
    var tags: [String]
    var scores: [String: Int]
}

let p = Profile(name: "Sam", tags: ["a", "b"], scores: ["math": 90])
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)

열거형도 준수 가능

원시 값이 있는 열거형(예: String 또는 Int)은 자동으로 Codable이 됩니다. JSON에서는 원시 값으로 인코딩됩니다.

import Foundation

enum Status: String, Codable {
    case active, paused, done
}

struct Task: Codable {
    var title: String
    var status: Status
}

let t = Task(title: "Ship", status: .active)
let data = try JSONEncoder().encode(t)
print(String(data: data, encoding: .utf8)!)

프로퍼티는 Codable이어야 합니다

합성은 저장 프로퍼티 모두 Codable일 때만 작동합니다. 프로퍼티에 사용자 정의 타입을 사용한다면 해당 타입도 준수해야 합니다. 그렇지 않으면 컴파일러가 합성을 거부합니다.

import Foundation

struct Address: Codable {
    var city: String
}

struct Person: Codable {
    var name: String
    var address: Address
}

let p = Person(name: "Lee", address: Address(city: "Rome"))
print(try JSONEncoder().encode(p).count, "bytes")

Codable이 중요한 이유

Codable은 직접 작성해야 하는 직렬화 반복 코드를 없애고, 타입을 단일 기준 원천으로 유지하며, 컴파일 시점에 불일치를 찾아냅니다. Swift 앱 안팎으로 데이터를 이동할 때 사용하는 표준적인 방법입니다.

import Foundation

struct Settings: Codable {
    var theme: String
    var fontSize: Int
}

let s = Settings(theme: "dark", fontSize: 14)
let data = try JSONEncoder().encode(s)
let back = try JSONDecoder().decode(Settings.self, from: data)
print(back.theme, back.fontSize)

빠른 확인: Codable 준수

준수에 대해 배운 내용을 테스트해 보세요.

복습: Codable 준수

Swift에서 직렬화의 기초를 배웠습니다:

  • Codable = Encodable & Decodable입니다.
  • 모든 프로퍼티가 Codable이면 준수가 자동으로 합성됩니다.
  • JSONEncoder는 Data를 만들고, JSONDecoder는 값을 다시 구성합니다.
  • 표준 타입, 원시 값 열거형, 중첩된 Codable 타입을 모두 지원합니다.

자주 묻는 질문

“Codable 따르기” 강의는 무료인가요?

네 — “Codable 따르기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Codable 따르기”에서 뭘 배우나요?

형식이 자동으로 인코딩 및 디코딩되도록 합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“Codable 따르기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Codable 따르기
  2. JSONEncoder로 인코딩하기
  3. JSONDecoder로 디코딩하기
  4. 옵셔널과 중첩 형식 처리
← Swift Academy(으)로 돌아가기