일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- copy on write
- 무선빌드
- fastlane
- FLUTTER
- reactivex
- DevTools
- Android
- BloC
- IOS
- FocusNode
- TextInputFormatter
- error
- Equatable
- Xcode
- flutter web
- appstore
- 성능 개선
- shorebird
- 갤럭시폴드
- GetX
- abstact
- PG결제
- reject
- SHIMMER
- MVVM
- Codemagic
- delegate
- struct
- Swift
- Codepush
Archives
- Today
- Total
뚝딱뚝딱 모바일
[Swift] Struct와 Class에 대해 알아보자 본문
안녕하세요!
이번엔 Struct와 Class의 차이점에 대해 한번 알아보도록 하겠습니다.
Struct와 Class의 공통점
- 값을 저장할 수 있는 변수를 선언할 수 있다.
- 기능을 제공할 수 있는 함수를 선언할 수 있다.
- 각 값들에 접근할 수 있는 subscript를 정의할 수 있다.
- 초기 상태를 지정할 수 있는 생성자(initializer)들을 정의할 수 있다.
- Extension을 통해 기능을 확장할 수 있다.
- Protocol에 따라 특정적인 기능을 제공할 수 있다.
Class에는 있지만, Struct에는 없는 점
- 한 Class가 다른 Class의 특성을 상속받을 수 있다.
- 타입 캐스팅을 사용하여, 런타임에서 Class의 Type을 분석하고 해석할 수 있다.
- 소멸자(Deinitializer)를 통해 할당된 자원들을 해제할 수 있다.
- Reference counting을 통해 한 Class에 둘 이상의 참조가 가능하도록 한다.
여기서 알 수 있는 가장 큰 차이점은 바로 마지막 참조에 관한 내용입니다.
Class는 Reference Type, 즉 복사를 할 때, 새로 생성이 되는 것이 아닌 메모리 위치만 복사됩니다.
그렇기 때문에, 복사된 Class의 변수를 변경하면, 기존 Class의 변수도 변경이 됩니다.
하지만 Struct는 Value Type이기에, 복사할 때마다 새로 생성이 됩니다.
Class처럼 복사되는 것을 얕은 복사
Struct처럼 복사되는 것을 깊은 복사라고도 합니다.
그럼 비슷하면서도 다른 이 두 친구들을 어떻게 선택하고 활용해야 할까요?
Struct와 Class를 선택할 때, 고려할 것
아래에서 1개이상 만족한다면, Struct의 사용을 권장한다고 합니다.
- 주목적이 간단한 캡슐화를 위한 것인 경우
- 인스턴스가 참조되는 것보단 복사되는 것을 원할 경우
- 인스턴스의 어떠한 변수가 참조되는 것보단 복사되는 것을 원할 경우
- 변수나 함수 등, 상속받거나 구현받을 필요가 없을 경우
이상 Struct와 Class에 대해 '조금' 알아보았습니다.
참고자료 : https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
'iOS 지식' 카테고리의 다른 글
[iOS][App Store] Guideline 5.1.1 - Legal - Privacy - Data Collection and Storage (1) | 2023.12.28 |
---|---|
[iOS] ViewController Lifecycle에 대해 알아보자 (0) | 2023.03.18 |
[Swift] Copy On Write (COW)에 대해 알아보자 (4) | 2023.03.17 |
[iOS] Delegate 패턴에 대해 알아보자 (3) | 2023.02.13 |
[Xcode] 무선으로 Build 해보기 (0) | 2022.04.18 |