728x90
반응형
안녕하세요🐶
빈지식 채우기의 비니🙋🏻♂️입니다.
오늘의 포스팅은 WWDC 2023의 여섯 번째 - 스위프트의 새로운 기능 - 2 에 대해 알아보도록 하겠습니다.
- Swift Macro
이전 포스팅 Swift Macro에 대해 보고 오시면 이해하는데 도움이 될 수 있습니다👍🏻
1. Swift Macro 기능
- 라이브러리 작성자에게 새로운 도구를 제공하여 매크로 시스템을 통한 표현적 API 설계를 지원한다.
- 언어 자체의 능력을 확장하고 *보일러플레이트 적 코드를 제거하고 Swift 포현력을 이용할 수 있다.
*보일러 플레이트 : 최소한의 변경으로 반복적으로 사용되는 코드. '묻지도 따지지도 않고 따라 적는 코드'
그러면 어떻게 매크로를 사용하여 보일러 플레이트 코드를 줄일 수 있나요?
- isAbsolute, isRelative 같은 Check 기능을 사용하기 위해서는 위와 같이 별도의 기능 정의가 필요합니다.
- 별도의 정의가 필요하기 때문에 이것을 우리는 보일러 플레이트적 코드라 부를 수 있습니다.
- 하지만 매크로를 사용하면 아래와 같이 표현할 수 있습니다.
- @CaseDetection을 사용하여 별도의 구현 없이 Check 기능을 사용할 수 있습니다.
assert(max(a, b) == c)
- Assert 함수는 조건이 참인지 아닌지 확인한다.
- 조건이 거짓이면 프로그램은 중지하지만, 정확히 어떤 에러인지 확인하기 어렵다.
- 로그를 추가하거나 디버거를 통해 확인할 수 있다.
- Assert 라는 매크로를 확장하여 #assert 로 생성한다.
- a,b,c 에 어떤 값이 들어갔고 왜 조건이 거짓으로 나오는지도 확인할 수 있다.
- 기본적으로 매크로는 매개변수에 대한 타입 체크가 실행된다.
- 예를 들어, 최댓값을 다른 값과 비교하는 것을 잊었다면 위 이미지와 같이 에러 메세지가 매크로로 확장되기 전에 즉시 출력됩니다.
- 매크로의 대부분은 외부 매크로로 정의되고 있고 String을 통해 매크로 적용의 모듈과 타입을 구체화 합니다.
2. Swift Macro 동작 원리
- 외부 매크로 타입은 별도의 프로그램에 적용되어 있으며 compiler plug-in으로 작동한다.
- Swift compiler가 소스코드를 전달 > 매크로의 사용을 플러그인에 보낸다.
- 플러그인이 새로운 소스 코드를 생산하면 다시 Swift Compiler에 통합한다.
- 직접 보일러플레이트를 생성하지 않아도 매크로가 대신 기능을 수행해준다.
- assert 매크로는 해시 구문(#)을 사용하기 때문에 freestanding 매크로라고 불립니다.
- 구문에서 직접 작동하여 새로운 코드를 생성합니다.
- 값을 생성하는 곳이면 어디든지 사용할 수 있어서 Expression Macro 라고도 할 수 있다.
3. 매크로의 종류
@attahed(member) | Type 또는 Extension에서 새로운 정의를 추가 *앞서 나온 @CaseDetection은 여기에 속함 |
@attahed(peer) | 비동기 프로그래밍인 Completio Handler와 같은 기능으로 수행 |
@attahed(accessor) | 접근자 매크로이며, Property와 같은 기능을 수행 |
@attahed(memberAttribute) | Type 또는 Extension에 속성을 추가할 수 있는 기능을 수행 |
@attahed(conformance) | Type 또는 Extension에 프로토콜과 같은 타입들을 준수하게끔 할 수 있는 기능을 수행 |
- SwiftUI에서 Observable의 기능을 사용하여 UI 를 업데이트를 하려고 합니다.
- 그러기 위해서는 항상 ObservableObject를 준수하도록 하고 내부 프로퍼티들은 모두 @Published를 선언해야 합니다.
- 다만 아래와 같이 매크로를 사용하면 깔끔하게 사용이 가능합니다.
- @Observable 매크로를 통해 깔끔하게 값의 변화를 관찰하고 UI를 업데이트 할 수 있습니다.
- @Observable에 사용된 매크로는 위와 같이 3개의 종류가 사용되었습니다.
- Xcode를 통해 해당 매크로가 어떻게 정의되어있고 확장되어 있는지 아래와 같이 확인할 수 있습니다.
이상으로 [WWDC 2023] (6) 스위프트의 새로운 기능 - 2 포스팅을 마치겠습니다.
틀린 부분이나 궁금한 사항은 댓글 남겨주세요~
참고
728x90
반응형
'Apple 🍎 > WWDC 2023' 카테고리의 다른 글
[WWDC 2023] (7) 스위프트의 새로운 기능 - 3 (0) | 2023.09.12 |
---|---|
[WWDC 2023] (5) 스위프트의 새로운 기능 - 1 (0) | 2023.09.07 |
[WWDC 2023] (4) Swift Macro (0) | 2023.09.06 |
[WWDC 2023] (3) SwiftData (0) | 2023.08.29 |
[WWDC 2023] (2) Widget 확장 (0) | 2023.08.28 |