티스토리 뷰
728x90
*Heap 보다는 *Stack 메모리에 할당 한다.
- Heap에 할당되는 참조 타입의 class 보다는, Stack에 할당되는 값 타입의 struct나 enum에 할당한다.
Why?
Stack은 LIFO(Last In First Out)의 단순한 구조로 메모리 할당과 해제가 편리하고 빠르기 때문입니다.
반면,
class는 Heap 영역에서 사용하지 않은 블록을 찾아 메모리 할당을 처리하며,
할당 해제시에는 해당 메모리를 적절한 위치로 다시 삽입 합니다.
사전적 의미
Heap: (아무렇게나 쌓은) 더미
Stack: (차곡차곡 쌓은) 더미
Reference counting을 적게 만든다.
- class 에서 String, Dictionary, Set, Array와 같은 가변길이 (길이가 고정적이지 않은) Collection 타입의 변수 사용을 줄입니다.
Why?
가변길이 Collection들은 struct 타입이지만 내부 데이터를 Heap에 저장하기 때문에
컴파일 시점에서 사이즈를 정확히 알기 어렵습니다.
해결 예시)
uuid를 String 타입이 아닌 UUID 타입으로 변경하여 reference를 줄입니다.
UUID는 32자리의 16진수로 표현됩니다. (길이가 변하지 않음)
Dynamic dispatch 보다 Static dispatch를 지향 한다.
Method Dispatch
프로그램이 어떤 메소드를 호출할 건지 결정하여 그 메소드를 호출하는 과정을 말합니다.
어떤 메소드인지 결정되는 시점에 따라 Static Dispatch와 Dynamic Dispatch 두 가지 방식이 있습니다.
Static Method Dispatch
컴파일시점에 컴파일러가 메소드의 코드 위치를 파악할 수 있어, 런타임에 찾는 과정 없이 바로 코드를 실행 합니다.
구현된 코드들이 어디서 실행되는지 알 수 있기 때문에 *메소드 인라이닝과 같은 코드 최적화를 적극적으로 시행합니다.
*메소드 인라이닝: 메소드를 호출할 때 해당 메소드로 이동하지 않고 메소드의 결과값을 바로 반환 하여 성능을 향상 시키는 것.
Dynamic Method Dispatch
Static과 달리 메소드의 위치를 찾을 수 없어서 런타임에 table을 참조하여 해당 메소드에 대한 정보를 가져와 코드를 실행 합니다.
Why?
class는 Heap Allocation을 사용하기 때문에 reference counting이 발생하게 되며, dynamic dispatch로 메소드를 호출 합니다. 여러 메소드가 얽혀있는 상황에서는 메소드 인라이닝과 같은 최적화를 할 수 없기 때문에 Static Method Dispatch를 지향 합니다.
상속되지 않는 class 에는 final 키워드를 붙여준다.
팀원들이 코드를 볼때 상속하지 않는다는 것을 명시할 수 있으며,
컴파일러가 Static Dispatch하게 할 수 있습니다.
728x90
'iOS' 카테고리의 다른 글
[Swift] 옵셔널 체이닝 (Optional Chaining) (0) | 2022.05.22 |
---|---|
[iOS] TableView, CollectionView 차이점 (0) | 2022.05.20 |
[Swift] 소멸자 (Deinitialization) (0) | 2022.05.15 |
[Swift] 고차함수 - reduce (0) | 2022.05.13 |
[iOS] SceneDelegate 란? (feat. LifeCycle) (0) | 2022.05.11 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Swift joined
- swift property
- Swift inout
- Swift RIBs
- swift protocol
- Swift 프로그래머스
- Swift Leetcode
- swift reduce
- swift 고차함수
- ios
- 2023년 회고
- Swift 알고리즘
- Swift init
- CS 네트워크
- RTCCameraVideoCapturer
- Combine: Asynchronous Programming with Swift
- removeLast()
- Swift
- Swift final
- Swift joined()
- Swift Error Handling
- swift programmers
- Class
- Swift 내림차순
- iOS error
- RIBs tutorial
- swift (programmers)
- 원티드 프리온보딩
- Swift 프로퍼티
- Swift ModernRIBs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함