[iOS] @EnvironmentObject @StateObject의 차이점

강치우·2023년 12월 21일
2

수입푸드

목록 보기
2/13

@EnvironmentObject를 공부하면서 @StateObject의 차이점에 대해 궁금해져서 조금 찾아봤다. 이 두 속성 래퍼는 SwiftUI에서 데이터를 관리하고 뷰에 전달하는 방식에서 중요한 역할을 한다.

하지만 처음 접하는 사람들에게는 이 둘의 사용법과 목적이 다소 혼동될 수도 있다고 생각한다. 오늘은 이 두 속성 래퍼의 차이점을 명확히 이해하고, 언제 각각을 사용해야 하는지에 대해 알아보려고 한다.

먼저, @StateObject와 @EnvironmentObject가 어떻게 다른지 알아보기 전에, 각각이 어떤 목적으로 사용되는지를 이해하는 것이 중요하다.

SwiftUI의 상태 관리는 앱의 반응형 디자인과 사용자 경험에 직접적인 영향을 미치기 때문에, 이러한 속성 래퍼들의 역할과 사용 방법을 정확히 파악하는 것이 중요하다.

이제, 각각의 속성 래퍼가 어떻게 다른지 Araboza.

@EnvironmentObject

  • @EnvironmentObject는 앱의 여러 뷰에 걸쳐 공유되어야 하는 데이터에 대한 접근을 제공합니다. 이는 주로 전역적 또는 부모-자식 뷰 관계가 아닌 뷰에서 사용됩니다.
  • @EnvironmentObject는 앱의 상위 레벨(예: Scene 또는 WindowGroup)에서 설정되며, 모든 하위 뷰에서 이를 접근할 수 있습니다. 이를 사용하기 위해선, 객체가 앱의 어딘가에서 .environmentObject() 모디파이어를 통해 제공되어야 합니다.
  • 앱의 여러 부분에서 공통으로 사용되는 사용자 설정, 사용자 세션 정보, 테마 설정 등에 주로 사용됩니다.

@StateObject

  • @StateObject는 SwiftUI 뷰가 소유하고 있는 ObservableObject의 인스턴스를 관리합니다. 이는 뷰의 상태를 나타내는 객체에 주로 사용됩니다.
  • 뷰 내에서 @StateObject를 사용하여 ObservableObject의 새 인스턴스를 생성하고, 뷰의 생명주기 동안 이를 유지합니다. @StateObject는 뷰가 처음 로드될 때 한 번만 생성되므로, 뷰의 재생성 시에도 데이터가 유지됩니다.
  • 특정 뷰와 밀접하게 연관된 데이터 모델, 예를 들어 뷰의 입력 폼에 대한 사용자 입력 데이터, 특정 뷰에서만 사용되는 설정 등에 사용됩니다.

정리하며

@EnvironmentObject는 앱 전반에 걸쳐 공유되는 데이터에 사용되며, 여러 뷰에 걸쳐 접근 가능하다.
반면, @StateObject는 특정 뷰에 한정된 데이터를 관리하는 데 사용된다.

@StateObject는 뷰가 생성될 때 생성되고, 뷰의 생명주기에 따라 유지되며, 뷰에 종속한다. @EnvironmentObject는 뷰 계층의 상위에서 제공되며, 하위 뷰들이 이에 접근한다.

@EnvironmentObject는 앱 전체에서 공통적으로 필요한 데이터에 적합하고, @StateObject는 뷰 내부의 상태 관리에 적합하다.

profile
자허블을 좀 더 좋아하긴 합니다.

0개의 댓글