1. 배열이란?
배열(Array)은 같은 타입의 데이터를 연속된 메모리 공간에 저장하는 선형 자료구조이다.
2. 배열의 동작 방식

1️⃣ 배열은 데이터를 연속된 메모리 공간에 저장
각 데이터는 인덱스를 가지기 때문에 특정 위치의 데이터에 바로 접근할 수 있다.
2️⃣ 데이터 추가
- 배열의 가장 뒤에 새로운 요소를 넣는 방식
- 특정 위치에 요소를 삽입하는 방식
3️⃣ 데이터 삭제
- 배열의 가장 뒤의 요소를 제거하는 방식
- 특정 위치의 요소를 제거하는 방식
3. 배열의 장,단점
3.1 배열의 장점
배열은 데이터가 연속된 메모리 공간에 저장되기 때문에, 인덱스(index)를 알고 있다면 원하는 위치의 데이터에 바로 접근할 수 있다.
이러한 특징을 임의 접근(Random Access) 이 가능하다라 한다.
즉, 처음부터 순서대로 탐색하지 않아도 특정 위치의 값을 즉시 가져올 수 있어 배열은 탐색 속도가 빠르다
3.2 배열의 단점
배열은 중간에 데이터를 추가하거나 삭제할 때 비효율적일 수 있다.
예를 들어 특정 위치에 데이터를 삽입하려면, 기존 요소들을 한 칸씩 뒤로 밀어야 하고, 삭제할 때 역시 뒤에 있는 요소들을 앞으로 다시 당겨야 한다.
이때, 데이터의 개수가 많아질수록 이동해야 하는 데이터도 많아지기 때문에 성능적인 부담이 생길 수 있다.
이를 오버헤드가 커진다고 표현한다.
오버헤드란 프로그램이 실행되는 과정에서 추가로 발생하는 메모리 사용량이나 실행 시간 같은 비용을 의미한다.
4. 배열의 실제 활용 사례
4.1 Google Sheets
구글시트는 배열을 광범위하게 사용하여 표 형태의 데이터를 저장하고 조작한다.
시트의 각 셀은 해 및 열의 인덱스, 정렬, 필터링, 계산 함수와 같은 연산을 통해 접근할 수 있다.
4.2 Instagram
인스타그램은 업로드된 이미지를 저장하고 처리하는 과정에서 배열을 활용된다.
이 때, 이미지는 수많은 픽셀(pixel)값들의 집합으로 이루어져 있고, 각 픽셀 정보는 배열 형태로 저장된다.
밝기 조정이나 필터 기능 역시 픽셀 값을 변경하는 방식으로 동작하며, 이 과정에서 배열 구조가 활용된다.
5. 구현
class Array:
# 생성자
def __init__(self):
self.items=[]
# ✅ 데이터 추가하기
# ① 데이터 추가- 맨 뒤에 추가
def append(self, data):
if self.items: # 배열에 요소가 있을 때
arr_type = type(self.items[0]) # 첫번째 요소의 type을 기억
if type(data) == arr_type: # data 와 arr_type과 같을 때
self.items.append(data) # data 추가
else: # data 와 arr_type과 같지 않을 때
print(f'{arr_type.__name__}형 자료형을 입력해주세요')
else:
self.items.append(data)
# ② 데이터 추가 - 원하는 위치에 추가
def insert(self, index, data):
if self.items: # 배열에 요소가 있을 때
arr_type = type(self.items[0]) # 첫번째 요소의 type을 기억
if type(data) == arr_type: # data 와 arr_type과 같을 때
self.items.insert(index, data)
else: # data 와 arr_type과 같지 않을 때
print(f'{arr_type.__name__}형 자료형을 입력해주세요')
else:
self.items.insert(index, data)
# ✅ 데이터 삭제하기
# ① 데이터 삭제 - 맨 뒤 데이터 삭제 후 그 값을 return
def pop(self):
if self.items : # Array가 비어있지 않을 때
result=self.items.pop()
return result
else : # Array가 비어있으면, 메세지를 출력한다.
print('Array가 비어있습니다.')
# ② 데이터 삭제 - 특정 위치 데이터 삭제 후 그 값을 return
def pop_at(self,index):
if self.items : # Array가 비어있지 않을 때
result=self.items.pop(index)
return result
else: # Array가 비어있으면, 메세지를 출력한다.
print('Array가 비어있습니다.')
# ✅ 조회하기
# 예를 들어 arr[3] <- Array를 인덱스를 통해 접근하기 위해
def __getitem__(self,index):
return self.items[index]
# ⊕ Array를 순회했을 때의 결과를 보여준다
def display(self):
print('Array 순회 결과:',end=' ')
if self.items: # Array가 비어있지 않을 때
for item in self.items:
print(item,end=' ')
print()
else: # Array가 비어있을 때
print('순회 결과 :Array가 비어있습니다')
arr= Array()
arr.append(10)
arr.append('20')
arr.append(30)
arr.append(40)
arr.append(50)
arr.display()
print(arr[1])
print('3번 인덱스 pop():',arr.pop_at(3))
print('arr.pop()',arr.pop())
arr.display()
arr.insert(2,'100')
arr.insert(3,100)
arr.display()
실행결과

6. 배열(Array)과 Python의 리스트(List)는 완전히 같은 개념일까?
배열과 Python의 리스트는 엄밀히 다른 개념이다.
파이썬의 리스트는 전통적인 배열의 역할을 수행할 수 있지만,
내부적으로는 동적 배열로 구현되어 있어 훨씬 더 유연하고 확장된 자료구조이다.
6.1 데이터 타입
- 배열(Array) : 같은 타입의 데이터만 모을 수 있다.
- 파이썬의 리스트(List) : 다양한 타입의 데이터를 섞어서 모을 수 있다.
6.2 크기의 유연성
- 배열 (Array): 크기가 정적이다. 처음 만들 때 크기를 미리 정해두면 나중에 마음대로 공간을 늘리거나 줄일 수 없다
- 파이썬의 리스트 (List) : 동적이다. 정해진 용량을 초과하면, 자동으로 더 큰 메모리를 할당하여 기존 데이터를 옮겨 담는 방식으로 동작한다
'python' 카테고리의 다른 글
| 자료구조 -큐(Queue) (0) | 2026.05.30 |
|---|---|
| 자료구조 - 스택(Stack) (0) | 2026.05.30 |
| 11. 객체 지향 프로그래밍 4대 패러다임 ① (0) | 2026.05.28 |
| 10. 객체지향 프로그래밍 (0) | 2026.05.28 |
| 9. 사용자 정의 함수 ② (0) | 2026.05.28 |