Soy's Devlog

[자료구조] 배열 (Array) 본문

Computer Science/자료구조

[자료구조] 배열 (Array)

소이리 2025. 4. 3. 23:56

컴퓨터는 디지털 계산기처럼 몇가지 입력받은 값들로만 정해진 계산을하고 출력을 해내는 기계가 아니다. 데이터가 많을수도 있고 비즈니스로직이 복잡하기도 하고 일괄적으로 대량의 데이터를 처리하기도 하는 등 다양한 경우의 수가 있는데 이를 최대한 효율적으로 수행할 수 있게 해주는 컴퓨터과학의 기초이론이기 때문에 중요하다고 할수있다!

자료구조의 분류

단순자료구조는 변수를 선언할 때 사용하는 것들을 예로 들 수 있고 나머지는 복합자료구조인데 이는 다시 선형 자료구조와 비선형 자료구조로 나뉜다. 선형 자료구조는 메모리내에 데이터들이 순차적으로 나열되어 있는 것이고, 비선형 자료구조는 메모리내에 여기저기 흩어져 있는 형태를 말한다. 선형자료구조는 다시 생성 시 크기가 고정되는 정적 자료구조와 실행 중에 크기가 유동적으로 변할 수 있는 동적 자료구조로 나뉜다. 배열과 리스트는 프로그래밍 언어에서 제공하는 자료구조인 내장형이고 나머지는 개발자가 직접정의하여 사용하는 사용자정의형 자료구조이다. 이 글에서는 정적 자료구조 중 대표적인 배열에 대해 정리하는 시간을 가져보도록 하겠다.

 


배열

  • 차례, 순서와 관련된 기본적인 자료구조  
  • 데이터의 메모리공간에서의 물리적위치를 순서적으로 결정함.
  • 인덱스와 원소값 <index, value>의 쌍으로 구성된 집합.
  • index : 컴퓨터 내부구조나 메모리 주소와 무관하게 이해하기 쉽도록 개발자에 의해 개념적으로 정의된 값.

크기가 6인 1차원배열 a[6]을 표현한 것이다. 배열의 첫번째 a[0]부터 시작해서 a[배열크기-1] 까지의 구조를 갖게된다.

 

예를들어 크기가 6인 int형 배열 a가 있다고 해보자. 배열의 인덱스는 0번부터 시작하여 (배열의 크기 -1)의 값으로 표현된다. 

0x1000 과 같은 것은 배열의 시작주소로 예를 든것인데, 나머지 항목들의 메모리 위치를 알고자 한다면 int형 배열이므로 각 데이터는 4bytes 의 크기를 갖는다. 위 그림에서 항목의 메모리 위치 = 배열 시작주소 + (index x 4)로 알 수 있다.

 

배열의 특징

  1. 데이터들이 모두 같은 자료형, 같은 기억공간의 크기를 갖는다.
  2. 각 데이터의 물리적인 위치의 순서가 배열의 인덱스 순서와 일치한다.
  3. 인덱스 값을 이용해 데이터에 접근하는 직접접근이 가능하다.

배열의 장점

  1. 인덱스로 직접접근이 가능하기에 접근속도가 빠르다.
  2. 연속된 메모리저장 방식이므로 순차적 데이터 처리가 가능하다.
  3. 코드를 간결하게 구성할 수 있다. ex) 반복문

배열의 단점

  1. 데이터의 삽입, 삭제가 어렵다. 중간에 삽입 또는 삭제를 할 경우 데이터이동이 많아지기 때문에..
  2. 최초로 크기가 지정된 후 크기변경이 불가능하다. = 정적배열 (Static Array)
  3. 메모리의 연속성이 요구되므로 크기가 큰 배열을 생성할 땐 그만큼의 메모리공간이 확보되어야 한다. 

리스트

배열의 특징을 보완한 것으로 가장큰 특징은

  1. 리스트 안에 들어가는 항목값의 데이터 타입을 지정하지 않는다. 서로다른 타입의 데이터를 담을 수 있다.
  2. 생성할 때 크기를 지정하지 않고 제한을 받지 않는다.
  3. 동적배열이다. 

파이썬의 경우

storage.append(78)     #맨 뒤에 78추가
storage.insert(2,78)   #2번 위치에 78이 삽입되고 기존 데이터들은 뒤로 한칸씩 밀린다.
storage.pop(2)         #2번 index삭제되고 데이터들이 한칸씩 앞으로 당겨진다.

 

자바의 경우

ArrayList<String> fruit = new ArrayList<String>();

fruit.add("딸기");		//딸기 string데이터를 추가한다.
fruit.remove("딸기");		//데이터를 삭제

 

배열 지원하는 언어 : C , Fortran...

리스트 지원하는 언어 : python, javascript, php...

배열과 리스트 모두 지원하는 언어 : Java, C++ 

 

 

 

 

 

참고 : 방송대 자료구조강의, 부산대 소프트웨어융합교육 자료구조 

'Computer Science > 자료구조' 카테고리의 다른 글

[자료구조] 연결리스트 Linked List  (0) 2025.05.03
[자료구조] 큐 (Queue)  (0) 2025.04.12
[자료구조] 스택 (Stack)  (0) 2025.04.08
Comments