-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
Array와 List의 차이점
1. 개념
| 구분 | Array | List |
|---|---|---|
| 정의 | 고정된 크기의 메모리 블록에 연속적으로 저장되는 데이터 구조 | 동적 크기의 데이터 구조로, 요소가 연결되어 저장됨 |
| 저장 방식 | 인덱스를 기준으로 요소가 순차적으로 저장됨 | 요소들이 포인터를 통해 연결됨 |
2. 주요 차이점
1) 크기
- Array:
- 크기가 고정되어 있음. 생성 시 미리 크기를 지정해야 함.
- 크기 변경이 어렵고, 변경 시 새 배열을 생성해야 함.
- List:
- 크기가 동적(dynamic)으로 변함.
- 요소를 추가하거나 삭제하면 크기가 자동으로 조정됨.
2) 메모리
- Array:
- 연속된 메모리 블록에 저장됨.
- 인덱스를 통해 요소에 빠르게 접근 가능 (O(1)).
- List:
- 요소가 개별적으로 저장되고 포인터로 연결됨.
- 요소 접근 시 포인터를 따라가야 하므로 접근 속도가 느림 (O(n)).
3) 삽입/삭제
- Array:
- 삽입/삭제 시 요소를 이동해야 하므로 비효율적임 (O(n)).
- 배열의 중간에 삽입하거나 삭제할 때 비용이 큼.
- List:
- 삽입/삭제가 용이함 (O(1)).
- 포인터만 변경하면 되므로 중간에 삽입/삭제하는 데 유리함.
4) 메모리 사용 효율
- Array:
- 메모리 효율이 높음(추가적인 포인터를 저장하지 않음).
- List:
- 각 요소마다 추가적으로 포인터를 저장하므로 메모리 사용량이 큼.
3. iOS에서의 구현
-
Array:
- Swift에서 기본적으로 제공하는
Array타입. - 예시:
var array = [1, 2, 3, 4] array.append(5) // 요소 추가 print(array[2]) // 요소 접근
- Swift에서 기본적으로 제공하는
-
List:
- Swift에서는 연결 리스트를 직접 구현해야 함.
- 예시: 단일 연결 리스트(Singly Linked List)
class Node { var value: Int var next: Node? init(value: Int) { self.value = value } } class LinkedList { var head: Node? func append(_ value: Int) { let newNode = Node(value: value) if let head = head { var current = head while current.next != nil { current = current.next! } current.next = newNode } else { head = newNode } } } let list = LinkedList() list.append(1) list.append(2)
4. 사용 사례
-
Array:
- 데이터의 크기가 고정적이거나 요소 접근 속도가 중요한 경우.
- 예: 대규모 데이터 분석, 캐싱.
-
List:
- 데이터의 크기가 유동적이고 삽입/삭제 작업이 빈번한 경우.
- 예: 큐(Queue), 스택(Stack) 구현.
5. 결론
- Array는 고정 크기와 빠른 접근이 필요한 경우 적합.
- List는 동적 크기와 삽입/삭제 작업이 중요한 경우 유리.
Metadata
Metadata
Assignees
Labels
No labels