iOS. class의 성능을 향상 시킬수 있는 방법들을 나열해보시오.
Class와 Struct의 성능
- Allocation: 인스턴스를 생성하면 Stack과 Heap 중 어느 곳에 할당되는지
- Reference Counting: 인스턴스를 통해 Reference Count가 얼마나 발생하는지
- Method Dispatch: 인스턴스에서 메서드를 호출했을 때, 메서드 디스패치가 정적인지 동적인지
1. Allocation
- Swift는 자동으로 메모리 할당과 해제를 처리함
- 메모리 할당과 해제는 Stack or Heap에서 처리 됨
Stack
- Stack은 LIFO(Last In First Out)의 단순한 구조로 메모리 할당과 해제가 편리함
- 시간복잡도는 O(1)로 속도가 매우 빠름
- Stack Pointer를 사용하여 할당과 해제를 처리함
Heap
- Heap은 Stack보다 조금 더 복잡함. 다이나믹한 할당 방법을 사용하는데, Heap 영역에서 사용하지 않은 블록을 찾아 메모리 할당을 처리함. 할당을 해제하기 위해, 해당 메모리를 적절한 위치에 다시 삽입함.
- 여러 스레드가 동시에 Heap에 접근할 수 있기에 Locking 또는 다른 동기화 메커니즘으로 무결성을 보호해야 함
무결성
- 데이터 무결성이란 데이터의 정확성과 일관성이 보장된 상태를 의미함.
- 정확성이란 중복이나 누락이 없는 상태를 뜻함
- 일관성이란 원인과 결과가 연속적으로 보장돼 변하지 않는 상태를 의미함