목차
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잖아~ 여기서 Object는 Heap영역에 쌓이는 것이고, 변수에 할당하게 되면 변수는 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 type인 class로 정의해야 한다.
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 |