상용구를 줄이는 연결형 멤버 매크로
멤버 매크로로 init, CodingKeys 또는 Equatable 준수를 자동 생성합니다.
상용구를 줄이는 연결형 멤버 매크로은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
멤버 매크로 개요
부착형 멤버 매크로는 장식된 타입에 새로운 멤버(프로퍼티, 메서드, 이니셜라이저)를 직접 생성합니다.
@AddID
struct User { var name: String }
// After expansion:
// struct User { var name: String; var id = UUID() }MemberMacro 준수하기
MemberMacro를 구현하고 새 멤버를 나타내는 DeclSyntax 배열을 반환하십시오.
import SwiftSyntaxMacros
struct AddIDMacro: MemberMacro {
static func expansion(
of node: AttributeSyntax,
providingMembersOf decl: some DeclGroupSyntax,
in context: some MacroExpansionContext
) throws -> [DeclSyntax] {
return ["var id = UUID()"]
}
}이니셜라이저 생성하기
필요할 때 멤버 매크로로 사용자 지정 이니셜라이저를 생성하여 멤버별 이니셜라이저를 대체할 수 있습니다.
// Macro expansion returns:
[
"init(name: String) { self.name = name; self.id = UUID() }"
]@Observable 매크로 내부
Swift에 내장된 @Observable은 멤버 매크로를 사용하여 클래스에 관찰 인프라를 추가합니다.
@Observable
class Counter {
var count = 0
// macro adds: _$observationRegistrar, access(), withMutation()
}장식된 타입 읽기
decl 매개변수를 통해 장식된 타입의 프로퍼티에 접근하여 컨텍스트를 반영하는 멤버를 생성하십시오.
if let structDecl = decl.as(StructDeclSyntax.self) {
let members = structDecl.memberBlock.members
// iterate to inspect stored properties
}저장 프로퍼티 추출하기
멤버 목록에서 저장 프로퍼티 패턴을 사용하는 변수 선언을 필터링하여 코드 생성을 제어하십시오.
let storedProps = members.compactMap { member -> VariableDeclSyntax? in
guard let varDecl = member.decl.as(VariableDeclSyntax.self),
varDecl.bindingSpecifier.tokenKind == .keyword(.var)
else { return nil }
return varDecl
}멤버에서 Equatable 생성하기
@AutoEquatable 매크로는 각 저장 프로퍼티를 비교하여 ==를 생성할 수 있습니다.
// Generated code:
static func == (lhs: User, rhs: User) -> Bool {
lhs.name == rhs.name && lhs.id == rhs.id
}멤버 매크로와 준수 매크로 결합하기
멤버를 추가하고 프로토콜 준수도 선언하기 위해 MemberMacro를 ConformanceMacro와 함께 사용하는 경우가 많습니다.
struct AutoEquatableMacro: MemberMacro, ConformanceMacro { ... }특성 인수
매크로가 생성하는 코드를 사용자 지정하도록 인수를 받을 수 있습니다.
@Clamped(range: 0...100)
var score: Int = 50
// macro reads range from attribute node and generates clamping accessors매크로 오류 보고
매크로를 잘못 사용했을 때 MacroExpansionError를 던지거나 진단 메시지를 생성하십시오.
guard decl.is(StructDeclSyntax.self) else {
throw MacroError.message("@AddID can only be applied to structs")
}빌드 성능
확장이 컴파일 시간에 수행되므로 멤버 매크로는 런타임 추가 비용을 발생시키지 않으며 생성된 코드를 캐시할 수 있습니다.
// All generated members are emitted as source code
// and compiled normally — no reflection at runtime빠른 확인
부착형 멤버 매크로가 준수해야 하는 프로토콜은 무엇입니까?
수업 요약
멤버 매크로(MemberMacro)는 장식하는 타입을 위한 저장 프로퍼티, 계산 프로퍼티 및 이니셜라이저를 생성합니다. 타입에 이미 있는 멤버를 읽어 컨텍스트에 맞는 코드를 생성하십시오. ConformanceMacro와 결합하면 프로토콜 준수도 추가할 수 있습니다.
자주 묻는 질문
“상용구를 줄이는 연결형 멤버 매크로” 강의는 무료인가요?
네 — “상용구를 줄이는 연결형 멤버 매크로” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“상용구를 줄이는 연결형 멤버 매크로”에서 뭘 배우나요?
멤버 매크로로 init, CodingKeys 또는 Equatable 준수를 자동 생성합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“상용구를 줄이는 연결형 멤버 매크로” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 매크로 역할: 독립형과 연결형
- 독립형 표현식 매크로 작성하기
- 상용구를 줄이는 연결형 멤버 매크로
- 매크로 테스트와 디버깅