본문 바로가기

Swift

ArraySlice와 Array

Array와 ArraySlice는 Swift에서 배열 데이터를 다루는 방식의 차이를 보여줍니다.

 

1. Array

  • Swift에서 일반적인 배열 타입입니다.
  • 독립된 데이터 컨테이너로, 데이터는 배열 내에 직접 저장됩니다.
  • 모든 요소에 접근할 수 있으며, 다양한 연산을 지원합니다.

특징:

  • 메모리를 별도로 할당하여 데이터를 저장.
  • 독립적으로 생성되고 관리됨.
  • 직관적이고 대부분의 경우에 사용됨
let array: Array<Int> = [1, 2, 3, 4, 5]
print(array[0]) // 출력: 1

 

 

2. ArraySlice

  • 배열의 일부를 참조하는 타입입니다.
  • 배열에서 서브스크립트 연산(Array[range]) 등을 사용하여 생성됩니다.
  • 원본 배열의 메모리를 공유하므로, 별도의 메모리 복사가 일어나지 않습니다.

특징:

  • 원본 배열의 메모리를 공유.
  • 메모리 효율적이고 빠름.
  • 그러나, Array와 다르게 작동하는 부분이 있어 사용할 때 주의가 필요.
let array: [Int] = [10, 20, 30, 40, 50]
let slice: ArraySlice<Int> = array[1...3] // 원본 배열의 일부를 참조
print(slice) // 출력: [20, 30, 40]

 

중요:

  • slice[0]를 호출하면 원본 배열의 인덱스를 기준으로 참조합니다.
  • 따라서, slice[0]가 20이 아닌 오류를 반환합니다. 올바르게 접근하려면 Array로 변환하거나 직접 작업해야 합니다.
// ArraySlice를 Array로 변환하여 올바르게 작동
let convertedArray = Array(slice)
print(convertedArray[0]) // 출력: 20

 

 

3. 주요 차이점

특징 Array ArraySlice
메모리 데이터를 독립적으로 보관 원본 배열의 메모리 공유
성능 별도의 메모리 할당 (비교적 느림) 원본 배열의 일부를 참조 (빠름)
용도 일반적인 데이터 관리에 적합 성능이 중요한 부분에서 부분 배열 관리
범위 접근 인덱스가 항상 0부터 시작 원본 배열의 인덱스를 그대로 유지
변환 필요성 없음 필요시 Array로 변환 필요
 

4. 언제 사용해야 할까?

Array 사용

  • 배열의 데이터를 독립적으로 관리해야 할 때.
  • 데이터를 변환하거나 다른 곳에서 사용해야 할 때.
  • 메모리 관리보다는 직관적 사용이 중요한 경우.

ArraySlice 사용

  • 배열의 일부만 참조하고, 원본 데이터를 수정하지 않는 경우.
  • 메모리 효율과 성능이 중요한 경우.
  • 배열을 슬라이스하여 간단히 데이터 처리할 때.

 

🔥 ArraySlice를 자주 사용하는가?

ArraySlice는 일반적으로 성능이 중요한 특정 상황에서만 사용됩니다. 대부분의 경우 개발자들은 **Array**를 사용하며, ArraySlice는 Swift가 내부적으로 메모리 효율성을 위해 사용하는 최적화 도구라고 생각할 수 있습니다.

 

실제로는?

  • 대부분의 작업에서는 Array를 사용합니다.
  • ArraySlice는 배열 슬라이싱 작업에서 Swift가 자동으로 반환하는 타입이므로, 이를 Array로 변환해 사용하는 경우가 많습니다.