씬디의 블로그

[Swift] 클래스 기반의 Realm에서는 didSet이 동작을 안한다? (Property Observer - Class와 Struct에서의 동작 차이) 본문

App/Swift

[Swift] 클래스 기반의 Realm에서는 didSet이 동작을 안한다? (Property Observer - Class와 Struct에서의 동작 차이)

cyndi 2024. 2. 29. 13:31

Swift

Class 기반의 Realm에서는 didSet이 동작을 안한다?

 

Realm은 클래스 기반이다

클래스 기반에서는 프로퍼티 옵저버가 동작을 안한다?

 

프로퍼티 옵저버란?

Property Observer, 그대로 해석하면 Property를 관찰하는 자 인데

Property의 값을 관찰하다가 변경되면 호출하게 되는 녀석이다

 

'값이 변경되면 호출' 이라면 '값'에 의미를 두어야 한다

 

 

값 타입, 구조체에서만 Property Observer동작하고,

참조 타입인 클래스에서는 값이 변한게 아니기 때문에 Property Observer가 동작하지 않는 것이다

 

그러면 Realm클래스 기반이니 Property Observer가 동작할 수 없다

그래서 Realm 데이터에서 Property Observer 동작이 필요하다면

구조체 형태 [CoinRealmModel] 배열로 바꾸게 된 것이다

 

4. 배열이 구조체인가?

예에 그렇습니다

공식 문서에서 보여주는 예를 들자면

[1, 2, 3, 4, 5]가 할당되어 있는 변수 numbers를 -> 또 다른 변수 numbersCopy에 할당했다

 

numbers 변수 [0] 번 자리에 숫자 100을 넣으면

numbers는 [100, 2, 3, 4, 5] 가 되지만,

numbersCopy의 배열에는 영향을 끼치지 않는다

 

왜냐! 배열은 구조체로 구현되어있기 때문!

numbers와 동일하게 firstCopy, secondCopy 변수를 만들고

numbers 자리에 다른 숫자를 넣는들 firstCopysecondCopy는 멀뚱멀뚱 가만히 있는 것이다

 

그래서 클래스 기반의 Realm의 데이터의 값을 변경시켜 Property Observer를 동작시키게 하려면

구조체배열 형태로 바꾸는 것이다!