본문 바로가기
IOS App Programming/Swift

Struct VS Class 메모리 관점 고찰과 언제 써야할까?

by B_Tori 2024. 2. 28.

Struct VS Class 성능 비교

메모리 저장

Swift의 struct와 class의 차이는 메모리의 여러 영역 중 Stack과 Heap에 관련되어 있다.

  • struct → Stack 할당 (정적 할당 : 컴파일 시 크기 결정)
  • class → Heap 할당 (동적 할당 : 런타임 시 동적으로 할당됨)

Stack은 정적 타입으로 간단한 자료구조 형태를 가지며 O(1)의 시간복잡도를 가지고 간단하게 할당 해제할 수 있는 반면에 Heap은 메모리에 연속적으로 존재하지 않아 복잡한 과정을 거쳐 할당 해제 시 비용이 스택보다 더 크다.

Dispatch

https://bang-tori.tistory.com/77

 

접근제한자 정리 및 성능 향상 이유 + final 제한자

프로젝트를 진행할 당시 적절한 접근제한자를 설정하는 것이 성능 향상에 도움이 되니 외부 접근이 없다면 private 처리를 해보자라는 피드백을 받아 코드를 수정했던 경험이 있다. 그래서 접근

bang-tori.tistory.com

또한 접근제한자 정리에서 언급했던 것처럼 struct의 경우 value Type으로 Static Dispatch를 방식을 가지며

class의 경우 Reference Type으로 Dynamic Dispatch 방식을 가지고 있다.

여러 관점에서 봤을 때 Struct가 Class에 비해 메모리 관점에서 이점을 보는 듯하다.

그렇다면 Class 왜 씀? Struct를 사용하면 되는 거 아닐까? 싶어 진다.

Struct VS Class 선택 기준

애플에서는 안정성 및 여러 이유를 고려하여 기본적으로 구조체를 사용할 것을 권장하고 있다.

하지만 아래와 같은 경우에는 Class를 선택한다.

  • Object-C 상호운용성이 필요할 때
  • 모델링하는 데이터의 ID를 제어해야 하는 경우

아래는 내가 추가적으로 생각하는 Class를 사용해야 하는 경우이다.

  • 인스턴스 복사 시 값 타입 복사가 아닌 레퍼런스 타입 복사 (참조 복사)가 필요한 경우
  • 상속과 같은 객체 지향의 이점이 필요한 경우
  • → 하지만 이 경우에는 Struct도 프로토콜을 통해 다형성을 부여할 수 있기는 하기 때문에 애플에서는 프로토콜과 구조체를 이용할 것을 권장한다. ( 클래스는 클래스끼리만의 상속이 가능하지만 프로토콜은 클래스, 열거형, 구조체 모두 채택할 수 있기 때문)

댓글