python

자료구조 - 배열(Array)

cinnamonbrown 2026. 5. 29. 19:32

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