이전에 클래스를 배우며, "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를 붙여 넣어주면,
그 변수나 객체는 새로 만들어질 때 초기화 되지 않고,
어딘가 다른곳에 잘 저장이 되어 있는 상태가 된다.
이 부문은 나중에 좀더 다뤄보려고 한다.
'IOS > Swift-TIL' 카테고리의 다른 글
[Swift-TIL] 열거형 - 필요한 선택지를 만드는 방법은? (실습편) (0) | 2024.10.16 |
---|---|
[Swift-TIL] 열거형 - 필요한 선택지를 만드는 방법은? (이론편) (0) | 2024.10.16 |
[Swift-TIL] 클래스 - 주소값으로 객체를 만들어보기 (실습편) (0) | 2024.10.16 |
[Swift-TIL] 클래스 - 주소값으로 객체를 만들어보기 (이론편) (0) | 2024.10.16 |
[Swift-TIL] 구조체 - 하나의 동작을 하는 객체 만들기 (실습편) (0) | 2024.10.15 |