성능에 영향을 미치는 3가지
Memory Allocation: Stack or Heap
Reference Counting: No or Yes
Method dispatch: Static or Dynamic (메서드를 호출할 때
메모리를 할당할 때 스택에
value type 의 특징
변수 할당 시 stack에 값 전체가 저장됨
다른 변수에 할당될 때 전체 값이 복사됨 (copy by value) -> 하나를 변경해도 다른 것에 영향 없음
Heap을 안 쓰며 따라서 Reference Counting도 필요 없음
Heap 할당의 문제
할당 시에 빈 곳을 찾고 관리하는 것은 복잡한 과정
무엇보다 그 과정이 thread safe 해야 한다는 점이 가장 큰 문제 (다른 스레드 끼리 충돌이 없어야 되기 때문에 lock 등의 동기화 동작 필요..?)
- lock 등의 synchronization 동작은 큰 성능 저하 요소
반면 Stack 할당은
- 단순히 스택 포인터 변수값만 바꿔주는 정도 (성능에 큰 영향 x)
Heap 할당 줄이기
String은 구조체로 구현되어 있으며, 내부적으로는 힙 메모리를 사용합니다. 이는 구조체의 빠른 속도와 안정성을 유지하면서도 문자열의 가변적인 크기를 지원하기 위함
Method Dispatch
: 메서드 호출 시 실행될 코드의 위치를 결정하는 프로세스를 말한다.
(Method Dispatch는 Swift에서 다형성 Polymorphism을 구현하는 데 필수적인 개념)
- Static Method Dispatch 정적 디스패치
: 컴파일러가 컴파일 시점에 메서드 호출 시 실행될 코드의 위치를 결정하는 디스패치 방식으로, 컴파일 시간에 결정되기 때문에 런타임 오버헤드가 없다.
이 방식은 클래스나 메서드가 final 로 선언되거나, private 일 경우에 사용된다.
- Dynamic Method Dispatch 동적 디스패치
: 런타임 시점에 메서드 호출 시 실행될 코드의 위치를 결정하는 디스패치 방식으로, 런타임 오버헤드가 있지만 메서드의 다형성을 구현하는 데 필요하다.
이 방식은 메서드가 override 되었거나, 상위 클래스의 메서드가 하위 클래스에서 호출될 때 사용된다.
참고 : youtube - Swift 성능 이해하기,
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift] Initialization + Convenience init 이란? (0) | 2022.12.08 |
---|---|
[Swift] Copy On Write 동작 방식 (0) | 2022.12.07 |
[Swift] Optional 옵셔널이란? (0) | 2022.12.01 |
[Swift] Codable - CodingKey (0) | 2022.11.24 |
oop vs pop (0) | 2022.11.17 |