반응형

SwiftUI iOS 18 신기능: @Entry 매크로로 커스텀 EnvironmentValues 한 줄로 정의하기

iOS 18부터 SwiftUI의 EnvironmentValues 확장 방식이 크게 단순화되었습니다. 기존에는 뷰 계층 구조 전체에 전달할 커스텀 환경 변수를 정의하기 위해 EnvironmentKey 프로토콜을 선언하고 getter와 setter 연산 프로퍼티를 일일이 작성해야 했습니다. iOS 18에 새롭게 도입된 @Entry 매크로를 사용하면 이러한 보일러플레이트 코드 없이 선언적으로 환경 변수를 작성할 수 있습니다. 기존 방식과의 코드 구조 비교 및 실무 적용 패턴은 다음과 같습니다.


 

1. 기존 EnvironmentKey 정의 방식의 불편함

iOS 18 이전에는 커스텀 키를 선언하기 위해 커스텀 타입을 정의한 후, EnvironmentValues에 연산 프로퍼티를 연결하는 장황한 코드가 필요했습니다.

// 1. EnvironmentKey 프로토콜을 구현하는 타입 생성
private struct CustomThemeKey: EnvironmentKey {
    static let defaultValue: String = "Light"
}

// 2. EnvironmentValues 확장 및 getter/setter 구현
extension EnvironmentValues {
    var customTheme: String {
        get { self[CustomThemeKey.self] }
        set { self[CustomThemeKey.self] = newValue }
    }
}

이 방식은 단 하나의 커스텀 환경 변수를 추가하기 위해서도 불필요한 전용 struct와 키 매핑 구문을 매번 새로 작성해야 하는 보일러플레이트(Boilerplate) 문제가 있었습니다.


 

2. iOS 18+ @Entry 매크로를 활용한 한 줄 선언

iOS 18에서는 @Entry 매크로가 도입되어 EnvironmentValues 확장 내부에 기본값(Default Value)과 함께 변수를 선언하는 것만으로 키 생성과 Accessor 매핑이 자동 완료됩니다.

// iOS 18+ @Entry 매크로 적용 방식
extension EnvironmentValues {
    @Entry var customTheme: String = "Light"
}
  • 보일러플레이트 제거: 별도의 EnvironmentKey 타입을 만들지 않아도 컴파일러가 매크로를 통해 전용 키 타입 및 연산 프로퍼티를 자동 생성합니다.
  • 기본값 지정: 변수 선언 시 할당한 초깃값이 환경 변수의 기본값(defaultValue)으로 자동 지정됩니다.

 

3. 커스텀 EnvironmentValues 정의 및 뷰 적용 실무 예제

@Entry 매크로로 정의한 커스텀 환경 변수는 기존과 동일하게 .environment() 수정자 및 @Environment 프로퍼티 래퍼를 사용해 뷰 계층에 적용할 수 있습니다.

import SwiftUI

// 1. 커스텀 환경 변수 선언
extension EnvironmentValues {
    @Entry var userRole: String = "Guest"
}

// 2. 하위 뷰에서 환경 변수 읽기
struct ProfileView: View {
    @Environment(\.userRole) private var userRole

    var body: some View {
        Text("현재 사용자 권한: \(userRole)")
    }
}

// 3. 상위 뷰에서 커스텀 환경 변수 주입
struct ContentView: View {
    var body: some View {
        ProfileView()
            .environment(\.userRole, "Admin")
    }
}

 

4. 기존 방식 vs @Entry 매크로 비교 요약

 

구분 기존 방식 (iOS 17 이하) @Entry 매크로 방식 (iOS 18+)
코드 구조 EnvironmentKey 타입 선언 + EnvironmentValues 확장 EnvironmentValues 확장 내 @Entry 선언
작성 코드량 최소 8~10줄 이상 단 1줄
기본값 설정 EnvironmentKey.defaultValue에 명시 변수 초깃값 할당으로 자동 지정
가독성 및 유지보수 불필요한 전용 struct 타입 양산 선언 직관성 대폭 향상

(출처: Apple Developer Documentation - EnvironmentValues & @Entry)


 

5. 핵심 요약

iOS 18의 @Entry 매크로는 SwiftUI 환경 변수 작성 시 반복되던 보일러플레이트 코드를 단 한 줄로 축소하여 뷰 계층 간 상태 전달 코드의 가독성과 개발 생산성을 획기적으로 향상시킵니다.


#SwiftUI #iOS18 #Entry매크로 #EnvironmentValues #EnvironmentKey #SwiftUI신기능 #WWDC #Swift매크로 #iOS개발자

반응형
Posted by 까칠코더
,