Struct VS Class in Swift

HyoKwangRyu·2020년 9월 13일
1

iOS

목록 보기
1/1

서론

고민과 경험을 기록으로 남기기 위한 글.
계속 업데이트 될 것.
struct, class의 차이는 알고 있지만,
특정 상황에 둘중 무엇을 택해야 할지는 항상 고민 임.

애플의 권장: 이럴땐 struct를 써라

  • 구조체의 주 목적이 관계된 간단한 값을 캡슐화(encapsulate) 하기 위한 것인 경우
  • 구조체의 인스턴스가 참조되기 보다 복사되기를 기대하는 경우
  • 구조체에 의해 저장된 어떠한 프로퍼티가 참조되기 보다 복사되기를 기대하는 경우
  • 구조체가 프로퍼티나 메소드 등을 상속할 필요가 없는 경우

내 생각

기본적으로 애플의 권장사항 동의. 하지만 디테일한 내용이 더 있으면 좋을것 같다..

immutable

immutable 구현이 필요할땐, struct로 가자.

멀티스레딩

struct 가 더 안전하다.
class로 멀티스레딩을 구현하려면, 적절한 lock을 구현해야한다.

퍼포먼스 측면

struct안에 레퍼런스 타입의 프로퍼티가 있는 경우, 레퍼런스 수에 비례하여 레퍼런스 카운팅 오버헤드를 지불한다.

둘 이상의 레퍼런스가 있는경우, class보다 레퍼런스 카운팅 오버헤드가 더 많이 유지된다.
→ 이 경우 class로 만드는게 더 낫다!!!

String은 contents를 Heap에 저장한다. → 레퍼런스 카운트를 계산해야한다.

참고
이런 레퍼런스들을 줄이면서 최적화를 할 수 있다.
String을 다른 Struct타입으로 바꿔라!! Enum 적극 사용!!

profile
Backend Developer

0개의 댓글