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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.