IOS application/Swift

2. Struct vs. Class

개발자킹콩 2021. 1. 22. 00:34

목차

1. Struct와 Class의 차이

2. 언제 Struct를 사용하는가

3. 언제 Class를 사용하는가

4. 현업 개발자의 추천

 


1. Struct와 Class의 차이

 

 

변수 할당할 때 차이가 생긴다.

 

 

 

 

Class는 이미 할당된 변수를 새로운 변수로 할당할 때 새로운 변수는 기존의 변수를 지칭하고 있다.

 

 

 

 

Structure는 복사가 된다.

 

 

이렇게 동작의 차이가 생기는 이유는 뭘까?

두 타입이 생성되는 인스턴스가 컴퓨터 안에서 할당되는 메모리 공간의 차이가 있기 때문이다.

Class 는 Heap영역에, Structure는 Stack영역에 할당된다.

 

 

 

 

각 영역은 다른 속성을 갖고 있다.

Stack은 시스템에서 당장 실행하거나 타이트하게 control, managing해야하는 놈들은 stack에 할당한다. 그래서 효율적이고 빠른 특징이 있다.

Heap은 시스템에서 클래스 같은 reference type을 저장하는데 사용한다. 상당히 큰 메모리 풀을 갖고 있기에 시스템에 동적으로 메모리 할당 요청을 할 수 있다. Heap Stack처럼 자동으로 데이터를 제거하지 않기 때문에 신경을 좀더 써줘야 한다. stack보다 느리다는 특징이 있다.

 

, Class를 메모리에 할당하면 Object잖아~ 여기서 ObjectHeap영역에 쌓이는 것이고, 변수에 할당하게 되면 변수는 Stack에 쌓이게 된다. Stack에 쌓인 변수는 Heap영역에 있는 object의 주소 값을 갖게 되는 구조이다.

 

 

 

 

 

 

 


그렇다면 언제 Struct, 언제 Class를 쓰는 것이 좋을까?

 

2. 언제 Struct를 사용하는가(3가지)

 

  • Object같다, 다르다로 비교해야 하는 경우

 

 

  • Copy된 객체들이 독립적인 상태를 가져야 하는 경우

 

 

  • 코드에서 Object의 데이터를 여러 Thread에 걸쳐서 사용할 경우

Value type의 경우 해당 instance copy된 유니크 인스턴스이다.

그래서 여러 Tread에 걸쳐 사용하면 안전하다. ?

Thread가 유니크한 instance를 갖고 있기에, 한 객체에 여러 Thread가 접근하여 생기는 충돌이 없다.

 

 

 


 

3. 언제 Class를 사용하는가(2가지)

 

 

  • Object instance 자체가 같음을 확인해야 할 때

Object의 데이터가 같은 것을 확인하는 것이 아니라 객체 자체가 같음을 확인해야 하는 경우이다.

 

 

 

  • 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우

어플 개발을 할 때, UI application이라는 app객체가 있다. 앱이 구동됨에 있어서 유일한 하나의 객체인데, 어플 내에 있는 여러 Object에 의해 접근이 필요한데, 이런 경우는 reference typeclass로 정의해야 한다.

 

 

 


 

 

 

4. 현업 개발자의 추천

  • 일단 Struct로 만든다. 후에 class로 선언되야 하는 경우 바꾸자. 쉽다.

Swift는 Struct를 압도적으로 많이 사용한다.

 

 

https://developer.apple.com/swift/blog/?id=10

 

Value and Reference Types - Swift Blog

Get the latest news and helpful tips on the Swift programming language from the engineers who created it.

developer.apple.com

 

 

  • 공식문서가 최우선이 되는 것이 좋은 습관이다!!

'IOS application > Swift' 카테고리의 다른 글

5. AVMetadataItem  (0) 2021.02.18
4. Design Patton: MVVM 패턴  (0) 2021.02.06
3. 상속은 언제 하면 좋은가?  (0) 2021.01.22
1. Swift Method vs. Computed Property  (0) 2021.01.22
0. Instruction  (0) 2021.01.21