2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[Swift-TIL] ObservableObject는 무엇인가?

2024. 10. 16. 02:33ㆍIOS/Swift-TIL
SMALL

이전에 클래스를 배우며, "ObservableObject" 라는 단어에 대한 언급이 있어서

이 부분을 배워봤다.

 

"ObservableObject"는 관찰이 가능한 객체를 말한다.

예로, 아래 이미지를 보겠다.

"class Kar: ObservableObject"

즉, Kar이 관찰이 가능하다는 것을 정의해준 것이다.

그리고 이 변수가 바뀔 때 "@Published(배포)" 한다.

그러면, 아래 이미지 처럼

 

"@ObservedObject var myKar = Kar(name: "가솔린차량", owner: "당신의")"

이 구문을 잘 보자.

먼저,"Kar(name: "가솔린차량", owner: "당신의")"이부분이 바로

"ObservableObject(관찰대상)" 인것이다.

 

그리고

"@ObservedObject var myKar" 관찰을 하고있는게 myKar 인것이다.

그러면, "myKar"는 열심히 관찰을 하고 있고,

"class Kar: ObservableObject {" 얘는 관찰을 당하고 있고,

"@Published var name: String" 여기서 name이 변할 때 

"class Kar: ObservableObject" 얘의 퍼블리시드가 바뀌면,

"@Published var name: String" 바뀌었으니 알아서 업데이트 해라~ 라고

배포해버린다...

그렇게 배포하게 되면, 

"@ObservedObject var myKar = Kar(name: "가솔린차량", owner: "당신의")"

이 부문에서 바뀐것을 감지하고, 업데이트를 한다.

 

그런데, Struct에서는 그런 장치는 존재하지 않는다..

Struct 이야기가 나와서 그런지 @State를 추가적으로 배워보자면,

현재 전체적으로 만들어진 문서자체가 struct 인건 코드를 보면 알 수 있다.

 

현재 이 뷰는 struct 이다.

그렇기 때문에 이 뷰 안에 있는 무언가가 바뀌어도

현재 있는 화면과는 상관이 없다.

 

왜냐하면,

이 뷰는 이미 struct 이고,

즉, 화면은 이미 그려져있고,

현재의 화면은 업데이트가 될 수 없다.

이미 만들어 졌으니까..

 

그런데, 만약에 바뀌었다면,

화면을 새로 그려야 하니 

저 String에 어떠한 글자가 들어갈 때마다

@Published 처럼 바뀌었으니 화면을 그려 달라고 하더라도

변하지 못한다는걸을 말하고자 한다.

 

뭔가가 수정이되어서 새로 그리려고 한다면,

새로 그릴 때 처음 만드는 초기값이 설정이 되어야 하고,

그 초기값을 벗어 날 수 없듯이 @State를 붙여 넣어주면,

그 변수나 객체는 새로 만들어질 때 초기화 되지 않고,

어딘가 다른곳에 잘 저장이 되어 있는 상태가 된다.

 

이 부문은 나중에 좀더 다뤄보려고 한다.

728x90