Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - Swift] WWDC2025 정리 - swift의 새로운 기능 3편 (Swift 6.2, 성능 향상된 배열 InlineArray, Span) 본문

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)에 저장하는데, 크기를 넘어서면 새로운 메모리를 할당하고 복사하는 오버헤드가 발생하고 성능에 민감한 코드를 작성할 때 비효율적임

기존 Array 동작

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

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

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

Array vs InlineArray

  Array InlineArray
메모리 위치 힙(Heap) 스택(Stack) 또는 인라인 저장
크기 동적 고정 (컴파일 타임에 결정됨)
성능 힙 할당/복사로 느림 힙 없이 빠름
사용 용도 일반적인 경우 성능 중요, 메모리 제한 환경(임베디드 등)

Span

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

Comments