Swift의 Value 타입이 ObjC의 레퍼런스 타입보다 메모리를 적게 먹는다?!

안녕하세요~ 오랫만에 공부하다 애플이 어그로를 끄는데 혹 해버려서 이렇게 글을 쓰네요.

WWDC2020의 What’s New In Swift 영상의 앞 부분을 보면,

ObjC는 레퍼런스 타입으로 인스턴스 외부의 포인터들을 계속 참조하게 되고

Swift는 밸류 타입으로, 대부분의 값들이 어레이안의 인스턴스에 allocate 되어서

400개의 모델을 만들면 heap 사용량이 저렇게 60% 이하로 줄어든다.

는 건데,

결국 ObjC 의 오브젝트로 포인터, 즉 메모리 번지값일 뿐이고 첫 그림에서처럼 메모리 공간을 잡아먹어 봐야 8byte(64bit 니까) 인데,

뭔가 그림은 ObjC가 메모리 공간을 엄청 비효율적으로 잡아먹는 것 처럼 그려놨네요.

이제는 헤어진 ObjC지만 너무 구박 받는 것 처럼 보여 안쓰러움에… 써 봤어요

좋아요 1

좋은글 감사합니다 :slight_smile:

개인적으로 objective-C를 써본적은 없지만 상식적으로 reference type에서 주소를 저장하는 메모리 용량이
value type 값 자체를 저장하는 메모리 용량보다 작다고 생각하고 있었습니다.
근데 오히려 value type이 차지하는 용량이 적다니! 어그로 끌릴만 한 것 같습니다ㅋㅋ

한가지 더 궁금한건 Swift 의 경우 대부분의 프리미티브 타입이 value type 인 이유가 컴퓨팅 성능의 발전으로 int 나 double 과 같은 값들은 신경쓰지 않을 만큼 작아서 라고 알고있는데 이게 맞나요??

좋아요 1

네, 이제 1, 2 Byte를 가지고 고민할 수준은 아니다보니
메모리를 낭비하는 대신 안전을 담보할 수 있는 방향으로 발전하고 있네요.