[SwiftUI] ObservedObject가 뭘까??

2024. 6. 6. 22:59·Apple/SwiftUI
728x90
반응형

안녕하세요! 피피아노입니다 🎵

 

이번 포스팅에서는 ObservedObject에 대해서 포스팅을 해보려고 합니다!

 

그럼 바로 시작하겠습니다.

 

ObservedObject란?

ObservedObject가 무엇인지 알아보기 위해서 먼저 애플 공식 문서를 먼저 확인해보겠습니다.

https://developer.apple.com/documentation/swiftui/observedobject

 

ObservedObject | Apple Developer Documentation

A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes.

developer.apple.com

 

'A property wrapper type that subscribes to an observable object and invalidates a view whenever the observable object changes.'

 

'관찰 가능한 객체를 구독하고 관찰 가능한 객체가 변경될 때마다 뷰를 무효화하는 속성 래퍼 유형입니다.'

@propertyWrapper @frozen
struct ObservedObject<ObjectType> where ObjectType : ObservableObject

 

한국말로 해석해도 무슨 말인지 이해가 안 가기 때문에 좀 더 쉽게 정리를 해보겠습니다..!

 

@ObservedObject는 SwiftUI에서 데이터가 변경될 때 뷰를 업데이트하기 위해 사용하는 프로퍼티 래퍼입니다. 주로 외부에서 제공되는 데이터 모델을 관찰하고, 해당 데이터가 변경될 때 뷰를 자동으로 다시 렌더링하도록 합니다. @ObservedObject를 사용하면 뷰와 데이터 모델 간의 의존성을 효과적으로 관리할 수 있습니다.

 

이렇게만 정리하면 한 번에 이해하기 조금 어려울 수도 있으니까 더 쉽게 풀어서 정리를 해보겠습니다!

 

SwiftUI에서 @ObservedObject는 데이터가 바뀌면 화면을 자동으로 새로 그려주는 역할을 하는 도구라고 생각하면 됩니다.

 

만약 여러분이 앱에서 사용자의 입력이나 서버에서 받아온 정보 같은 외부 데이터를 화면에 보여주고 싶다면, 그 데이터가 변할 때마다 화면도 업데이트 해야겠죠. @ObservedObject를 사용하면, 이런 외부 데이터의 변화를 감지하고, 데이터가 바뀔 때마다 화면을 자동으로 다시 그려줍니다.

간단하게 말해서, @ObservedObject는 화면을 최신 상태로 유지시켜주는 도구라고 이해하면 되겠죠?

 

ObservedObject의 사용 방법

@ObservedObject를 사용하려면 먼저 관찰할 객체가 ObservableObject 프로토콜을 준수해야 합니다. ObservableObject 프로토콜은 객체의 변경 사항을 알리기 위해 @Published 프로퍼티 래퍼와 함께 사용됩니다.

 

1. ObservableObject 클래스 정의

import SwiftUI
import Combine

class Counter: ObservableObject {
    @Published var count: Int = 0
    
    func increment() {
        count += 1
    }
}

여기서 Counter 클래스는 ObservableObject 프로토콜을 준수하며, count 프로퍼티가 변경될 때마다 이를 알리기 위해 @Published로 선언되었습니다.

 

2. @ObservedObject를 사용한 뷰 정의

struct CounterView: View {
    @ObservedObject var counter: Counter
    
    var body: some View {
        VStack {
            Text("Count: \(counter.count)")
            Button(action: {
                counter.increment()
            }) {
                Text("Increment")
            }
        }
    }
}

CounterView 구조체는 Counter 객체를 @ObservedObject로 선언하고, counter 객체의 상태가 변경될 때마다 뷰를 업데이트합니다.

 

3. 부모 뷰에서 객체 전달

struct ContentView: View {
    @StateObject private var counter = Counter()
    
    var body: some View {
        CounterView(counter: counter)
    }
}

ContentView에서는 @StateObject를 사용하여 Counter 객체를 생성하고, 이를 CounterView에 전달합니다. @StateObject는 뷰의 생명주기 동안 객체를 유지하며, 뷰가 다시 생성될 때도 동일한 객체를 사용합니다.

 

@ObservedObject와 다른 프로퍼티 래퍼 비교

  • @State: 뷰 내부에서 상태를 관리할 때 사용합니다. 주로 간단한 상태를 관리하는 데 적합합니다.
  • @StateObject: 뷰의 생명주기에 걸쳐 객체를 관리할 때 사용합니다. 뷰가 다시 생성될 때도 동일한 객체를 유지합니다.
  • @ObservedObject: 외부에서 전달된 객체를 관찰할 때 사용합니다. 객체의 상태가 변경될 때마다 뷰를 업데이트합니다.
  • @EnvironmentObject: 환경 전역에서 공유되는 객체를 사용할 때 사용합니다. 주로 앱 전체에서 공통적으로 사용되는 데이터를 관리합니다.

일단 이렇게 간단하게 정리 했는데 기회가 된다면 다른 프로퍼티 래퍼도 더 자세하게 정리해보겠습니다..!!!


감사합니다.

잘못된 내용이 있거나 더 좋은 내용 피드백은 언제나 환영합니다!

궁금하신 부분은 댓글로 질문 부탁드립니다!

728x90
반응형

'Apple > SwiftUI' 카테고리의 다른 글

[SwiftUI] AVFoundation 톺아보기  (2) 2024.07.15
[SwiftUI] Core Data를 사용해보자  (2) 2024.07.07
[SwiftUI] @State란 무엇일까?  (2) 2024.05.27
[SwiftUI] List 동적 리스트로 구현하기  (2) 2024.05.15
[SwiftUI] List에 대한 기본기 이해하기  (1) 2024.05.06
'Apple/SwiftUI' 카테고리의 다른 글
  • [SwiftUI] AVFoundation 톺아보기
  • [SwiftUI] Core Data를 사용해보자
  • [SwiftUI] @State란 무엇일까?
  • [SwiftUI] List 동적 리스트로 구현하기
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (209)
      • Apple (127)
        • iOS (22)
        • visionOS (4)
        • Swift (68)
        • UIKit (2)
        • SwiftUI (24)
        • RxSwift (2)
        • Xcode (5)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ios
    티스토리챌린지
    옵셔널
    코딩테스트
    운영체제
    SWIFT
    디자인패턴
    Initializers
    Vision Pro
    배열
    UIKit
    변수
    제어문
    Xcode
    이니셜라이저
    프로퍼티 래퍼
    네트워크
    자바스크립트
    swiftUI
    연산자
    클래스
    스위프트
    combine
    함수
    오블완
    Apple
    프로세스
    visionOS
    프로그래머스
    비동기
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[SwiftUI] ObservedObject가 뭘까??
상단으로

티스토리툴바