Struct VS Class 성능 비교
메모리 저장
Swift의 struct와 class의 차이는 메모리의 여러 영역 중 Stack과 Heap에 관련되어 있다.
- struct → Stack 할당 (정적 할당 : 컴파일 시 크기 결정)
- class → Heap 할당 (동적 할당 : 런타임 시 동적으로 할당됨)
Stack은 정적 타입으로 간단한 자료구조 형태를 가지며 O(1)의 시간복잡도를 가지고 간단하게 할당 해제할 수 있는 반면에 Heap은 메모리에 연속적으로 존재하지 않아 복잡한 과정을 거쳐 할당 해제 시 비용이 스택보다 더 크다.
Dispatch
https://bang-tori.tistory.com/77
또한 접근제한자 정리에서 언급했던 것처럼 struct의 경우 value Type으로 Static Dispatch를 방식을 가지며
class의 경우 Reference Type으로 Dynamic Dispatch 방식을 가지고 있다.
여러 관점에서 봤을 때 Struct가 Class에 비해 메모리 관점에서 이점을 보는 듯하다.
그렇다면 Class 왜 씀? Struct를 사용하면 되는 거 아닐까? 싶어 진다.
Struct VS Class 선택 기준
애플에서는 안정성 및 여러 이유를 고려하여 기본적으로 구조체를 사용할 것을 권장하고 있다.
하지만 아래와 같은 경우에는 Class를 선택한다.
- Object-C 상호운용성이 필요할 때
- 모델링하는 데이터의 ID를 제어해야 하는 경우
아래는 내가 추가적으로 생각하는 Class를 사용해야 하는 경우이다.
- 인스턴스 복사 시 값 타입 복사가 아닌 레퍼런스 타입 복사 (참조 복사)가 필요한 경우
- 상속과 같은 객체 지향의 이점이 필요한 경우
- → 하지만 이 경우에는 Struct도 프로토콜을 통해 다형성을 부여할 수 있기는 하기 때문에 애플에서는 프로토콜과 구조체를 이용할 것을 권장한다. ( 클래스는 클래스끼리만의 상속이 가능하지만 프로토콜은 클래스, 열거형, 구조체 모두 채택할 수 있기 때문)
'IOS App Programming > Swift' 카테고리의 다른 글
[Swift] for 문 거꾸로 순회(stride), reverse VS reversed (0) | 2024.03.11 |
---|---|
배열 Safe Index - 안전하게 배열 조회하기 (0) | 2024.02.29 |
접근제한자 정리 및 성능 향상 이유 + final 제한자 (0) | 2024.02.23 |
CollectionType 차이점 및 효율적인 사용 시점 (0) | 2024.02.22 |
weak self 를 사용하지 않아도 되는 경우 (2) | 2024.02.07 |
댓글