WWDC 정리/WWDC 2025 정리
[iOS - Swift] WWDC2025 정리 - swift의 새로운 기능 3편 (Swift 6.2, 성능 향상된 배열 InlineArray, Span)
jake-kim
2025. 7. 2. 01:08
배열 향상 - InlineArray<int,int>
- 새로운 API (Swift 6.2+)
- InlineArray<요소의 크기, Int>
- 속도가 더 빠름
- 기존 Array처럼 유연성은 줄어들지만, 그 대신 속도와 메모리 효율이 훨씬 뛰어남
- 기존 Array의 단점을 보완해줌
- 동적 크기 조정을 위해 데이터를 힙(heap)에 저장하는데, 크기를 넘어서면 새로운 메모리를 할당하고 복사하는 오버헤드가 발생하고 성능에 민감한 코드를 작성할 때 비효율적임

- 만약 더 많은 요소가 저장되는경우 메모리에서 동작하는 과정?
- Heap에 새로운 메모리를 할당하고 기존 요소들을 복사과정이 필요

- InlineArray의 경우 heap에 별도로 저장하지 않고 Stack에 저장함

- 사용 방법
- Array같이 사용하며 아래에 요소의 갯수와 타입은 생략 가능 (컴파일가 알아서 추가해줌)

Array vs InlineArray
| Array | InlineArray | |
| 메모리 위치 | 힙(Heap) | 스택(Stack) 또는 인라인 저장 |
| 크기 | 동적 | 고정 (컴파일 타임에 결정됨) |
| 성능 | 힙 할당/복사로 느림 | 힙 없이 빠름 |
| 사용 용도 | 일반적인 경우 | 성능 중요, 메모리 제한 환경(임베디드 등) |
Span
- Array와 같이 데이터가 연속적인 자료구조를 띄는 곳에 사용
- 1. 빠르고 직접적인 메모리 접근
- Span은 배열 등 연속된 메모리 구조를 직접 다룰 수 있게 해줌
- 마치 포인터처럼 빠르게 접근할 수 있지만 포인터보다 훨씬 안전
- 속도는 빠르면서도 실수할 확률이 줄어듦
- 2. 메모리 안전성 보장
- 일반 포인터를 쓰면 메모리 해제 후 접근하거나 잘못된 범위를 읽을 위험이 존재
- 원본 배열이 수정되면 Span은 자동으로 무효화돼서 안전하게됨
- 3. 런타임 오버헤드 없이 동작
- 메모리 안전을 유지하면서도 성능에는 영향을 거의 주지 않음
- 컴파일 타임에 안전성을 체크하므로 실행 중엔 추가 비용이 거의 없음
- 4. 힙 할당 없이 처리 가능
- 기존 배열은 내부적으로 힙에 데이터를 저장하지만, Span은 스택이나 구조체 내부에서도 처리 가능해서 더 빠르고, 더 가벼움
- 모든 컨테이너 유형에 대해 제공함 (Swift 6.2부터)
