[WWDC] Understanding Swift Performance(3) - Generic Code
2023. 8. 8. 02:59
iOS/Swift
이번 포스팅에선 Generic을 사용할 때 Method Dispatch는 어떻게 동작하는지, Generic Type의 변수는 어떻게 저장되고 Copy되는지 알아보자. Generic Method Mechanism 왼쪽은 Drawable의 Protocol Type을 파라미터로 전달받는 함수이고, 오른쪽은 Drawable Type을 만족하는 Generic Type을 파라미터로 전달받는 함수이다. 별반 다를게 없어 보이지만, Geric코드는 Parametric Polymorphism(다형성)이라 불리는 Static한 형태의 Polymorphism을 제공한다. 즉, 오른쪽의 Generic한 함수는 왼쪽의 함수 형태보다 Static한 형태의 Polymorphism을 제공한다. Static한 형태의 Polymorph..
[WWDC] Understanding Swift Performance(2) - Protocol Programming
2023. 8. 7. 17:48
iOS/Swift
앞선 포스팅에서 Polymorphic(다형성)을 사용하기 위해선, Class를 사용해야 했다. 하지만, Class는 아래와 같은 이유로 성능적으로 좋지 않았다. Heap Memory Allocation, Reference Counting, Dynamic Dispatch 그렇다면 Struct로 "Polymorphic(다형성)"을 사용할 수 없을까? 이는 Protocol Oriented Programming을 통해 가능하다. Dynamic Dispatch without V-Table Class의 경우 Common Inheritance Relationship(공통 상속관계)가 존재하기 때문에 V-Table이 필요했다. 하지만 Struct의 경우 Class와 달리 Common Inheritance Relatio..
[WWDC] Understanding Swift Performance(1) - Dimensions of Performance
2023. 8. 6. 18:17
iOS/Swift
Swift에서 "Abstration(추상화) 메커니즘이 성능에 미치는 영향"을 이해하기 위해 가장 좋은 방법은 기본 구현을 이해하는 것이다. Abstration 메커니즘을 설계하고, 선택할 때 다음과 같이 3가지를 고려해야 한다. Allocation Reference Counting Method Dispatch 이 3가지 요소들을 하나하나 살펴보도록 하자. Allocation (Stack vs. Heap) Swift는 자동으로 메모리를 할당하고, 해제한다. 이 중 일부는 Stack에 저장하기도 Heap영역에 저장한다. Stack "Stack"은 LIFO구조로 Static하게 메모리를 할당할 수 있는 매우 단순한 Data Structure이다. Top에서만 데이터의 삽입(Push)과 삭제(Pop)가 가능하..