@iOS17; #SwiftMacro; 아직도 반복하니?
WWDC2023에서 발표한 SwiftMacro에 대해서 무엇이 있고, 어떤것인지 소개합니다!
작성자 : Saeroi — iOS Developer DelightRoom
WWDC2023.. 애플의 Vision Pro를 제외하고는 큰 기대 없이 컨퍼런스를 시청하게 되는데….
⁉️😮 기대와 다르게 WWDC2023에서 iOS 및 Swift 관련하여 굉장히 흥미로운 것들을 많이 발표하였어요. 그 중 SwiftMacro에 대해서 유용하게 사용할만한 것만 간단히 소개해드리려고해요!
(Expression Macros와 Attached Macros 중 유용한것!)
먼저 Macro라는 단어는 우리에게 굉장히 친숙 한데요. 잠깐 정의를 보면..
반복적인 작업을 더 빠르게 수행할 수 있도록 하는것으로 요약할 수 있겠네요!
iOS개발자도 swift로 코드를 작성하다보면 보일러플레이트 코드를 많이 볼 수 있어요.(우리는 중복을 싫어하지만 문법적인것은 피해갈 수 없죠🥲)
SwiftMacro를 이용하면 우리는 어떤 반복적인 작업을 쉽게 할 수 있을까요 ?
@Observable
SwiftUI로 UI코드를 작성할 때 Combine의 ObservableObject를 구현하게되면 우리는 아래와 같이 코드를 작성하게 됩니다.
class Object: ObservableObject {
@Published var title: String
@Published var subtitle: String
@Published var count: Int
...
}
ObservableObject 프로토콜을 구현하고 Property 마다 한땀한땀 @Published를 붙혀주는 지루하고 반복적인 작업..
@Observable 을 사용한한다면?
@Observable
class Object {
var title: String
var subtitle: String
var count: Int
...
}
프로퍼티 타입에 ValueType과 ReferenceType 모두 지원된다고 하네요!
@CaseDetection
Enum의 Case 타입 체크를 하기 위해 우리는 다음과 같은 코드를 작성할 때가 많이 있겠..죠?(저는 없었는데.. 애플이 만든 이유가 있을거라고 생각해요!)
enum Path {
case relative(String)
case absolute(String)
}let absPaths = paths.filter { $0.isAbsolute }extension Path { var isAbsolute: Bool {
if case .absolute = self { true }
else { false }
}
}extension Path { var isRelative: Bool {
if case relative = self { true }
else { false }
}
위의 Enum타입에 Case가 하나 추가될 때마다 isAbsolute와 같은 소스코드가 계속 추가되어야 한다는 단점이 있는데요.
@CaseDetection 을 이용한다면 ?
@CaseDetection
enum Path {
case relative(String)
case absolute(String) // 아래는 매크로에 의해 자동 생생된 코드(옵션을 통해 볼 수 있음)
var isAbsolute: Bool {
if case .absolute = self { true }
else { false }
} var isRelative: Bool {
if case . relative = self { true }
else { false }
}
}
매크로를 사용하여 번거롭게 Case가 추가될 때마다 새로운 소스코드를 작성할 필요가 없어졌네요!
#Preview
Xcode15부터는 기본적으로 SwiftUI 파일을 생성하면 #Preview를 이용한 파일이 자동으로 생성되는것을 알 수 있어요!
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}// Xcode15 이상에서 작성되는 SwiftUI Preview 코드
#Preview {
ContentView()
}
#Preview는 SwiftUI 뿐 만 아니라 UIKit 도 지원된다는것! 최소 지원버전이 iOS 13 이상이면 사용 가능해요.
Expand Macro
SwiftMacro를 이용하면 기본적으로 자동으로 생성되는 코드가 감춰져있어요! 이를 보기 위해서는 아래와 같은 옵션을 통해 보실 수 있어요.
지금까지 @Observable, @CaseDetection, #Preview 등에 대해서 사용방법을 알아보았는데요.
이외에도 많은 매크로가 있어요!
SwiftData에서 사용되는
@Model
@Attribute(.unique)
@Transient
#Predicate
등 커스텀 매크로도 가능하다는것!
#Preview를 제외하면 모두 iOS 17 이상만 사용이 가능해요 😭
앞으로도 많은 매크로가 추가될거 같네요 😁
자세한 사항은 아래의 swift-evolution 문서를 이용해주세요!
- SE-0389 • Attached Macros
- SE-0382 • Expression Macros
- SE-0397 • Freestanding Declaration Macros
- SE-0394 • Package Manager Support for Custom Macros
Apple이 매크로 기능을 추가하면서 많은 최적화도 같이 작업해서 성능이 많이 좋아졌다고 합니다.
회사의 프로젝트에는 매크로를 사용하려면 대략 2~3년정도 기다려야겠네요.
사용할 수 있는 그날까지 모두 화..이..팅!
⏰ 딜라이트룸에서 알라미와 함께 아침을 바꿀 분들을 모십니다
🙌딜라이트룸의 다양한 채널들을 팔로우하고 빠르게 소식을 받아보세요!
- 지금 바로 미디엄 팔로우하고 다음 아티클도 빠르게 만나보세요!
- 딜라이트룸 소식을 가장 빠르게! 딜라이트룸 링크드인 🔗
- 높은 평점으로 난리난 딜라이트룸 잡플래닛 ✅
- 딜라이트룸 일상을 엿볼 수 있는 인스타그램 📸