본문 바로가기
SwiftUI

@Environment(ModelData.self) var modelData 에서 @Environment는 뭐야?

by 밤새는 탐험가89 2025. 6. 5.
728x90
SMALL

@Environment(ModelData.self) var modelData는 Swift의 새로운 Observation 프레임워크에서 도입된 방식으로,
앱의 전역(shared) 상태를 SwiftUI 뷰에서 주입받아 사용하는 방법

 

🔍 @Environment(ModelData.self) var modelData의 의미

이 코드는 ModelData라는 타입의 객체를 환경(Environment)에서 자동으로 주입받는다는 뜻
즉, SwiftUI는 앱의 상위 어딘가에 있는 ModelData 인스턴스를 찾아서 이 뷰에 연결

 

🧠 쉽게 말하면:

  • ModelData는 앱 전체에서 공통으로 사용하는 데이터 모델
  • 이 데이터를 뷰 안에서 쓰고 싶을 때, 직접 생성하거나 전달하지 않아도 됨
  • 대신 @Environment(ModelData.self)를 쓰면 자동으로 환경에서 가져옴

 

🧩 배경: SwiftUI의 Environment 시스템

기존 방식 (ObservableObject 사용 시):

@EnvironmentObject var modelData: ModelData

 

  • 이건 ObservableObject 기반의 SwiftUI 환경 주입 방식이었고,
  • 반드시 .environmentObject()로 상위 뷰에서 주입해야 했음

 

✅ 새로운 방식 (@Observable + @Environment):

@Observable
class ModelData {
    var landmarks: [Landmark] = ...
}


@Environment(ModelData.self) var modelData

 

  • 더 간결하고 타입 안전하게 환경 데이터를 주입받을 수 있음
  • 더 이상 @EnvironmentObject.environmentObject(...)를 명시할 필요 없이,
    Swift가 자동으로 ModelData 인스턴스를 환경에서 찾아서 주입

 

 

💡 전체 흐름 요약

@Observable
class ModelData {
    var landmarks: [Landmark] = load("landmarkData.json")
}


struct LandmarkList: View {
    @Environment(ModelData.self) var modelData    // 전역 데이터 주입
    @State private var showFavoritesOnly = false  // 지역 상태

    var body: some View {
        List(modelData.landmarks) { landmark in
            ...
        }
    }
}

 

  • modelData.landmarks를 통해 JSON에서 로드된 데이터를 가져와 리스트를 그리고,
  • showFavoritesOnly는 이 뷰에서만 사용하는 필터링 상태

 

 

 

728x90
LIST

'SwiftUI' 카테고리의 다른 글

@Binding 은 뭐야?  (0) 2025.06.05
@Observable 이 뭐야?  (0) 2025.06.05
@State란?  (0) 2025.06.05
Hashable, Codable 뭐여?  (0) 2025.06.04
Spacer()  (0) 2024.12.22