소개

WWDC2023에서 드디어 매크로라는 혁신적인 기능이 나왔어요.

매크로는 상용구 코드(boilerplate-code)를 유려하게 처리할 수 있는 도구예요.

WWDC를 시청하며 “아! 이건 잘만 학습하면 정말 편하게 활용할 수 있겠구나!”라는 생각이 들었고, 이번 기회에 제가 생각한 아이디어를 구현해보면서 매크로를 사용하는 법을 설명드리려고 해요.

아이디어

앱을 개발하다보면 서버로부터 JSON 객체를 받아와 개발자가 선언한 모델에 파싱하는 작업을 할 거예요. 이 때 우리는 항상 동일한 상용구를 작성하게 되죠. 예를 들어볼까요?

아래는 앱에서 처리해야하는 JSON 코드가 2개 있습니다.

{
  "name": "SeungHyun Hong",
  "age": 130,
  "gender": "male"
  "created_at": "2024-08-08T09:33:26Z"
}
{
  "user_information": {
    "is_admin": true,
    "post_count": 30,
    "is_banned": false
  },
  "total_users": 582
}

우리는 이 코드를 파싱하기 위해 아래처럼 구현할 거에요.

struct Model: Codable {
  let name: String
  let age: Int
  let gender: Gender
  let createdTime: Date
  
  enum CodingKeys: String, CodingKey {
    case name
    case age
    case gender
    case createdTime = "created_at"
  }
}

enum Gender: String, Codable {
  case male
  case female
  case other
}
struct Model: Codable {
  let userInformation: UserInfo
  let totalUsers: Int
  
  enum CodingKeys: String, CodingKey {
    case userInformation = "user_information"
    case totalUsers = "total_users"
  }
}

struct UserInfo: Codable {
  let isAdmin: Bool
  let postCount: Int
  let isBanned: Bool
  
  enum CodingKeys: String, CodingKey {
    case isAdmin = "is_admin"
    case postCount = "post_count"
    case isBanned = "is_banned"
  }
}

두 모델을 살펴보면 보다시피 동일하게 반복되는 코드를 볼 수 있어요.