[Swift] Struct vs Class
class로 해야할지, struct로 해야할지 헷갈릴 때가 있어서 정리해보았습니다.
Class | Struct | |
공통점 |
|
|
차이점 |
|
|
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://medium.com/@jgj455/오늘의-swift-상식-struct-class-60fa5fd2218d