왕논의 연구실

[Swift] Struct vs Class 본문

iOS/Swift

[Swift] Struct vs Class

ywangnon 2022. 6. 18. 22:40

class로 해야할지, struct로 해야할지 헷갈릴 때가 있어서 정리해보았습니다.

 

  Class Struct
공통점
  • 프로퍼티 선언 가능
  • 메서드 선언 가능
  • .으로 내부 접근 가능
  • 생성자 가능
  • extension 가능
  • 프로토콜 채택 가능
차이점
  • 참조타입
  • 같은 인스턴스를 여러 변수에 할당하면, 변수값을 공유한다.
  • ARC로 메모리를 관리
  • 값타입
  • 같은 인스턴스를 여러 변수에 할당하면, 각각의 변수값을 가진다.

 

Class

color 1,2는 같은 인스턴스를 공유하지만, 인스턴스를 새로 만든 color3은 공유하지 않습니다.

 

Struct

복사한 인스턴스인 color2의 값을 변경해도, color1의 값에 영향을 주지 않습니다. 또한, 값을 변경하기 위해서는 var 키워드를 입력해야합니다.

 

왜 그럴까?

프로그램이 실행되면 프로그램이 사용할 메모리를 할당합니다. 할당된 메모리를 체계적으로 사용하기 위해 4가지 영역으로 구분됩니다. Code, Data, Heap, Stack입니다. 각각 간단하게 설명하면 code는 기계어 영역, data는 정적변수, 전역변수 영역, stack은 함수나 지역변수 등 영역, heap은 동적으로 할당된 데이터 영역입니다. struct는 stack영역에 실제 값들을 저장합니다. class는 heap에 값을 저장하고, stack에 heap의 주소를 저장합니다. 그래서 접근할때, stack의 주소를 보고 주소의 위치로 접근합니다. 그래서 struct는 값을 변경하기 위해 var를 입력해야하고, class는 주소가 변경되는 것은 아니기에 let으로 입력했어도 값을 변경할 수 있었던 것입니다.

 

그럼 언제, 무엇을쓸까?

Class Struct
  • 객체 자체의 비교가 필요할 때
  • 여러 쓰레드에서 접근해서 변경해야할때
  • 단순하거나 작은 데이터일때
  • 캡슐화만이 목적일때
  • 하나의 대상을 여러 쓰레드에서 사용할 때
  • 상속이 필요없을때
      ※ 애플가이드라인에서는 
  • 기본적으로 구조체를 사용
  • Object-C 관련해서는 Class를 사용
  • 프로토콜과 함께 구조체를 사용하여 기능을 공유
  • Identity를 제어해야한다면 클래스 사용, 아니면 구조체 사용
  • 하도록 권장하고 있다.

https://developer.apple.com/documentation/swift/choosing-between-structures-and-classes

 

Apple Developer Documentation

 

developer.apple.com

 

참고

https://velog.io/@minji0801/iOS-Swift-Structure-vs-Class

https://icksw.tistory.com/256

https://medium.com/@jgj455/오늘의-swift-상식-struct-class-60fa5fd2218d

https://didu-story.tistory.com/255

'iOS > Swift' 카테고리의 다른 글

[Swift] UIToolbar  (0) 2022.06.29
[Swift] 커스텀 폰트 적용  (0) 2022.06.27
[Swift] 모바일 저장소 - Realm  (0) 2022.06.08
[swift] 디자인 트렌드 적용  (0) 2022.05.25
[Swift]동적 아이콘 변경  (0) 2021.09.22