Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 프로그래머스
- Python
- 파이썬
- ios
- 그리디 알고리즘
- Kotlin
- error
- Android
- 백준 온라인 저지
- SwiftUI
- iOS개발
- 백준온라인저지
- 정렬
- Swift공부
- 공부
- 파이썬 풀이
- Clean Architecture
- Level 1
- UIKit
- 알고리즘 공부
- 오토레이아웃
- swift
- Autolayout
- Algorithm
- dfs
- BFS
- 안드로이드 공부
- 알고리즘
- 앱개발
- greedy algorithm
Archives
- Today
- Total
Tori의 개발 공부
Struct VS Class 메모리 관점 고찰과 언제 써야할까? 본문
Struct VS Class 성능 비교
메모리 저장
Swift의 struct와 class의 차이는 메모리의 여러 영역 중 Stack과 Heap에 관련되어 있다.
- struct → Stack 할당 (정적 할당 : 컴파일 시 크기 결정)
- class → Heap 할당 (동적 할당 : 런타임 시 동적으로 할당됨)
Stack은 정적 타입으로 간단한 자료구조 형태를 가지며 O(1)의 시간복잡도를 가지고 간단하게 할당 해제할 수 있는 반면에 Heap은 메모리에 연속적으로 존재하지 않아 복잡한 과정을 거쳐 할당 해제 시 비용이 스택보다 더 크다.
Dispatch
https://bang-tori.tistory.com/77
접근제한자 정리 및 성능 향상 이유 + final 제한자
프로젝트를 진행할 당시 적절한 접근제한자를 설정하는 것이 성능 향상에 도움이 되니 외부 접근이 없다면 private 처리를 해보자라는 피드백을 받아 코드를 수정했던 경험이 있다. 그래서 접근
bang-tori.tistory.com
또한 접근제한자 정리에서 언급했던 것처럼 struct의 경우 value Type으로 Static Dispatch를 방식을 가지며
class의 경우 Reference Type으로 Dynamic Dispatch 방식을 가지고 있다.
여러 관점에서 봤을 때 Struct가 Class에 비해 메모리 관점에서 이점을 보는 듯하다.
그렇다면 Class 왜 씀? Struct를 사용하면 되는 거 아닐까? 싶어 진다.
Struct VS Class 선택 기준
애플에서는 안정성 및 여러 이유를 고려하여 기본적으로 구조체를 사용할 것을 권장하고 있다.
하지만 아래와 같은 경우에는 Class를 선택한다.
- Object-C 상호운용성이 필요할 때
- 모델링하는 데이터의 ID를 제어해야 하는 경우
아래는 내가 추가적으로 생각하는 Class를 사용해야 하는 경우이다.
- 인스턴스 복사 시 값 타입 복사가 아닌 레퍼런스 타입 복사 (참조 복사)가 필요한 경우
- 상속과 같은 객체 지향의 이점이 필요한 경우
- → 하지만 이 경우에는 Struct도 프로토콜을 통해 다형성을 부여할 수 있기는 하기 때문에 애플에서는 프로토콜과 구조체를 이용할 것을 권장한다. ( 클래스는 클래스끼리만의 상속이 가능하지만 프로토콜은 클래스, 열거형, 구조체 모두 채택할 수 있기 때문)
'IOS App Programming > Swift' 카테고리의 다른 글
[Swift] for 문 거꾸로 순회(stride), reverse VS reversed (0) | 2024.03.11 |
---|---|
배열 Safe Index - 안전하게 배열 조회하기 (0) | 2024.02.29 |
접근제한자 정리 및 성능 향상 이유 + final 제한자 (0) | 2024.02.23 |
CollectionType 차이점 및 효율적인 사용 시점 (0) | 2024.02.22 |
weak self 를 사용하지 않아도 되는 경우 (2) | 2024.02.07 |