카테고리 없음

swift struct내에 class property가 있으면 안좋다 - reference counting과 스위프트 성능의 관계

studying develop 2022. 12. 20. 00:21

struct를 사용하다 보면 내부에 property는 어떻게 메모리 상에서 존재하는지 궁금했습니다.

struct내에 2개의 프로퍼티들 모두 heap에 존재하게 된다.

text, font 모두 referenceType으로 힙에 저장됩니다. 이런 경우 오른쪽 이미지 처럼, 스택에 레퍼런스하는 지점만 있고 모두 힙에 존재하는 데이터를 포인팅하게 되는데요. Label은 즉 두번의 레퍼런스 카운팅을 하게되어 비효율적이라 합니다.

 

reference counting은 자주 일어나지 않는게 좋습니다. 즉 아무리 struct라도 reference를 소유하는 경우는 꽤나 비효율적으로 동작한다는 얘기입니다.

 

struct는 1개 이상의(2개 이상인거 같은데...) reference를 갖는 경우, 레퍼런스 카운팅이 소유하는 레퍼런스 갯수만큼 발생하므로, class에 비해 비효율적이라 할 수 있습니다. struct를 효율적으로 사용하려면 reference를 갖지 않는 쪽으로 합시다.

 

 

즉 struct의 경우 string을 갖는거보다, enum을 소유하는게 효율적입니다.

왼쪽 경우는 mimeType이 레퍼런스, 오른쪽은 enum을 사용하여 struct 내부의 레퍼런스가 2개에서 1개로 된 모습.

장점을 말해보면

좌측 경우 보다, 우측이 type-safe함

또한 위에서 주장하는 장점이 레퍼런스가 2개에서 1개로 줄은건데, 그렇다면 enum은 heap에 저장되는게 아니라, stack에 아래처럼 저장되는거 같다.

 


참조.

https://developer.apple.com/videos/play/wwdc2016/416/