9.1 고정 크기 배열의 특징
고정 크기 배열은 생성 시 크기가 결정되고 프로그램 실행 중 변경될 수 없는 배열이야. Python에서 고정 크기 배열은 array
라이브러리를 사용하여 만들 수 있거나, 리스트를 사용할 수 있어. 비록 Python 리스트는 크기를 변경할 수 있지만, 다른 언어의 배열처럼 사용할 수 있어.
고정 크기 배열의 특징:
- 고정 크기: 배열의 크기는 생성 시 결정되고 변경할 수 없어.
- 동일한 타입: 배열의 모든 요소는 같은 타입이어야 해.
- 빠른 인덱스 접근: 배열 요소에 접근하는 시간은 일정한
O(1)
시간이 걸려. - 크기 불변: 배열의 요소 수는 일정하며, 새로운 요소를 추가할 수 없어.
Python에서 고정 크기 배열 생성 예제:
array
라이브러리를 사용하는 경우:
import array
# 정수형 배열 생성 (int 타입을 'i'로 지정)
arr = array.array('i', [1, 2, 3, 4, 5])
# 요소에 접근
print(arr[2]) # 결과: 3
# 요소 값 변경
arr[2] = 10
print(arr) # 결과: array('i', [1, 2, 10, 4, 5])
리스트를 사용하여 (고정 크기 배열을 흉내내기):
# 고정 크기 리스트 생성
arr = [0] * 5
# 요소 초기화
arr[0] = 1
arr[1] = 2
arr[2] = 3
arr[3] = 4
arr[4] = 5
# 요소에 접근
print(arr[2]) # 결과: 3
# 요소 값 변경
arr[2] = 10
print(arr) # 결과: [1, 2, 10, 4, 5]
9.2 고정 크기 배열의 장단점
모든 것에는 장단점이 있지, 고정 배열도 마찬가지야.
장점:
- 빠른 인덱스 접근: 배열의 모든 요소에 일정한
O(1)
시간에 접근할 수 있어서 데이터 읽기에 아주 효율적이야. - 간단한 구현: 배열은 이해하고 사용하기 쉬우며, 다양한 작업에서 쉽게 구현 및 사용할 수 있어.
- 효율적인 메모리 사용: 배열의 크기가 고정되므로 생성 시 메모리가 한 번에 할당되어 메모리 재할당의 비용을 피할 수 있어.
- 예측 가능성: 배열의 고정 크기는 메모리 관리와 자원 사용의 예측성을 높여줘.
단점:
- 크기 불변: 배열의 크기는 생성 시 결정되고 변경할 수 없어. 따라서 필요한 배열 크기를 미리 알아야 하거나 과도하게 메모리를 할당할 위험이 있어.
- 삽입 및 삭제 비용: 요소의 삽입 및 삭제는 시간이 많이 걸릴 수 있는데, 요소를 이동시켜야 하기 때문이야. 최악의 경우 배열 중간에 요소를 삽입하거나 삭제하는데
O(n)
시간이 소요돼. - 비효율적인 메모리 사용: 배열이 완전히 사용되지 않으면 남은 메모리 셀이 채워지지 않아 메모리가 비효율적으로 사용될 수 있어.
- 제한된 유연성: 배열은 크기를 동적으로 변경할 수 없어서 리스트 같은 동적 데이터 구조에 비해 덜 유연해.
9.3 사용 및 응용 예제
고정 크기 배열 사용 및 응용 예제를 몇 가지 살펴보자.
예제 1: 테이블과 행렬
고정 크기 배열은 크기가 미리 알려진 테이블과 행렬을 표현하는 데 자주 사용돼.
import numpy as np
# 고정 크기 3x3 행렬 생성
matrix = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
# 행렬 요소에 접근
print(matrix[1][2]) # 결과: 6
# 행렬 요소 변경
matrix[1][2] = 10
print(matrix)
# 결과:
# [[ 1 2 3]
# [ 4 5 10]
# [ 7 8 9]]
예제 2: 버퍼와 캐시
고정 크기 배열은 크기가 미리 정해져 변경되지 않는 버퍼와 캐시를 만드는 데 사용돼.
# 데이터 읽기용 고정 크기 버퍼
buffer_size = 1024
buffer = bytearray(buffer_size)
# 데이터를 버퍼에 씀
data = b"Hello, World!"
buffer[:len(data)] = data
print(buffer[:len(data)]) # 결과: b'Hello, World!'
예제 3: 시간과 날짜 데이터 저장
고정 크기 배열은 월별 일수와 같은 시간과 날짜 데이터를 저장하는 데 사용할 수 있어.
이 예제에서는 list
클래스를 통해 고정 배열의 동작을 에뮬레이션 해봅시다:
# 각 달의 일 수 (평년)
days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 데이터 접근
month = 2 # 2월
print(f"2월에는 {days_in_month[month - 1]} 일이 있습니다") # 결과: 2월에는 28 일이 있습니다
GO TO FULL VERSION