Swift) Class와 Struct의 차이점에 대해 설명하시오.
Class와 Struct 차이점
Class
참조 타입(Reference Type)
상속
가능- heap memory 영역에 할당 (속도가 느림)
- 런타임에 직접 alloc하며 reference counting을 통해 dealloc이 필요
- memory fragmentation 등의 overhead가 존재
- NSData serialize 가능
- Codable 사용 불가능
- 런타임에 타입 캐스팅을 통해서 클래스 인스턴스에 따라 여러 동작이 가능
- deinitializer 존재
Struct / Enum
값 타입(Value Type)
상속 불가능
(protocol은 사용 가능)- stack memory 영역에 할당 (속도가 빠름)
- scope based lifetime: 컴파일타임에 compiler가 언제 메모리를 할당/해제할지 정확히 알고있음
- data locality: CPU 캐시 히트율이 높음
- NSData로 serialize 불가능
- Codable 프로토콜을 이용하여 손쉬운 JSON <-> struct 변환 가능 (Swift 4 이상)
- 항상 새로운 변수로 copy가 일어나기 때문에 multi-thread 환경에서 공유변수로 인해 문제를 일으킬 확률이 적음