Swift에서는 코드를 구현할때 Struct와 Class로 필요한 형식과 용도에 맞게 묶어서 코딩을 한다.
Struct와 Class의 공통점
1. 데이터(Property)와 기능(Method)에 대해 정의 할 수 있다.
- 값을 저장하기 위해 Property를 정의
- 기능을 제공하기 위해 Method를 정의
2. 확장(Extension)이 가능하다
초기 구현된 내용에 새로운 기능 추가를 하여 하용할수 있다. (키워드 extention)
3. 서브스크립트(subscript) 사용할 수 있다.
- “.”을 이용해 하위의 프로퍼티에 접근 가능하다
4. 프로토콜 사용이 가능하다.
- Java의 Interface와 비슷한 개념
(추후 이 부분에 대해서도 정리가 필요)
5. 초기화를 정의하여 초기상태 설정이 가능하다.
- init를 이용하여 Property의 초기값을 설정 할수 있다.
Struct와 Class의 차이점
1. Struct는 value type이고, class는 reference type 이다.
- value type은 별도의 메모리에 값이 복사되어 사용된다.
- reference type 값이 복사 되는 것이 아니라 참조하고 있는 메모리의 주소를 사용한다.
2. Struct는 Stack에 할당하고, class는 heap에 할당 된다.
- Struct는 Stack에 할당하여 속도가 빠르다.
- Class는 Heap에 할당하여 속도가 느리다.
3. Struct는 상속을 할 수 없고, Class는 상속을 할수 있다.(Class에서도 단일 상속만 가능)
Structure를 써야 하는 경우.
1. 두 object의 같다, 다르다를 비교해야 하는 경우
2. Copy된 각 객체들이 독립적인 상태를 가져야 하는 경우
3. 코드에서 오브젝트의 데이터를 여러 스레드 걸쳐 사용할 경우
Class를 써야 하는 경우
1. 두 Object의 인스턴스 자체가 같음을 확인해야 할때
2. 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우
struct와 class에 대한 swift 참고 url.
developer.apple.com/swift/blog/?id=10
docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
개발 시 공식 문서의 내용을 먼저 참고하는 습관을 갖자.
'swift' 카테고리의 다른 글
[Swift] Sqlite 사용법 (2) | 2021.05.28 |
---|---|
[swift] Cocoapads import 에러 (0) | 2021.05.10 |
[Swift] FireBase 연동 (0) | 2021.05.10 |
[swift] 통신 시 인터넷 권한 추가 (info.plist 설정하기) (0) | 2021.05.07 |
[Swift] Objective-C 연동하기(bridging header) (0) | 2021.05.04 |