10.1 동적 배열의 특징
동적 배열 — 실행 중에 크기를 변경할 수 있는 데이터 구조야. 프로그램을 실행하는 동안 원소를 추가하거나 삭제할 수 있어, 배열의 크기를 미리 정의할 필요가 없지.
Python에서 동적 배열은 리스트 (내장 클래스 list)야, 원하는 위치에 원소를 추가, 삭제, 변경할 수 있어.
동적 배열의 특징:
- 변경 가능한 크기: 필요한 만큼 동적 배열의 크기를 늘리거나 줄일 수 있어.
- 빠른 인덱스 접근: 인덱스를 통해 원소에 접근하는 것은
O(1)시간에 가능해. - 자동 메모리 관리: Python은 리스트의 메모리 할당과 해제를 자동으로 관리해줘.
- 편리한 원소 조작 메서드: 내장 메서드를 통해 원소를 쉽게 추가, 삭제, 변경할 수 있어.
Python에서 동적 배열을 생성하고 사용하는 예:
# 리스트 생성
dynamic_array = [1, 2, 3, 4, 5]
# 원소 추가
dynamic_array.append(6)
print(dynamic_array) # 출력: [1, 2, 3, 4, 5, 6]
# 원소 삭제
dynamic_array.remove(3)
print(dynamic_array) # 출력: [1, 2, 4, 5, 6]
# 인덱스로 접근
print(dynamic_array[2]) # 출력: 4
# 원소 변경
dynamic_array[2] = 10
print(dynamic_array) # 출력: [1, 2, 10, 5, 6]
10.2 동적 배열의 장점과 단점
동적 배열에는 장점과 단점이 있어. 더 자세히 살펴보자.
장점:
- 유연성: 프로그램의 필요에 따라 크기를 조절할 수 있어, 메모리를 효율적으로 관리하고 다양한 양의 데이터를 처리할 수 있어.
- 빠른 인덱스 접근: 정적 배열처럼 동적 배열도 인덱스를 통해 원소에 빠르게 접근 가능해,
O(1)시간이 걸려. - 사용 편의성: Python의 리스트 관련 내장 메서드(예: append, remove, insert)는 원소 조작을 쉽게 만들어줘서 코드가 더 읽기 쉽고 유지보수가 간편해.
- 자동 메모리 관리: Python은 동적 배열의 메모리를 자동으로 관리해줘, 개발자는 수동으로 메모리를 할당하거나 해제할 필요가 없어.
단점:
- 메모리 재배치: 동적 배열의 크기를 늘릴 때 메모리를 재배치해야 할 수 있고, 이는 새로운 메모리 영역으로 원소를 복사하는 과정을 수반해. 이로 인해 프로그램이 일시적으로 느려질 수 있어.
- 삽입 및 삭제 비용: 배열 중간에 원소를 삽입하거나 삭제하려면 원소를 이동해야 해서
O(n)시간이 걸려. - 관리 비용: C와 같은 저수준 언어와 비교했을 때, Python의 동적 배열은 자동 메모리 관리와 예외 처리 때문에 추가적인 오버헤드가 있어.
10.3 사용 예와 응용
Python에서 동적 배열의 사용 예시 몇 가지를 보자.
1. 동적 할일 리스트 구현:
tasks = []
# 할일 추가
tasks.append("Task 1")
tasks.append("Task 2")
tasks.append("Task 3")
# 할일 완료하고 리스트에서 삭제
completed_task = tasks.pop(0)
print(f"Completed: {completed_task}")
print(f"Remaining tasks: {tasks}") # 출력: Remaining tasks: ['Task 2', 'Task 3']
2. 동적 객체 리스트 구현:
students = []
# 학생 추가
students.append("Alice")
students.append("Bob")
students.append("Charlie")
# 학생 삭제
students.remove("Bob")
print(f"Students after removal: {students}") # 출력: Students after removal: ['Alice', 'Charlie']
# 특정 위치에 학생 추가
students.insert(1, "David")
print(f"Students after insertion: {students}") # 출력: Students after insertion: ['Alice', 'David', 'Charlie']
GO TO FULL VERSION