Soy's Devlog
[자료구조] 배열 (Array) 본문
컴퓨터는 디지털 계산기처럼 몇가지 입력받은 값들로만 정해진 계산을하고 출력을 해내는 기계가 아니다. 데이터가 많을수도 있고 비즈니스로직이 복잡하기도 하고 일괄적으로 대량의 데이터를 처리하기도 하는 등 다양한 경우의 수가 있는데 이를 최대한 효율적으로 수행할 수 있게 해주는 컴퓨터과학의 기초이론이기 때문에 중요하다고 할수있다!
자료구조의 분류
단순자료구조는 변수를 선언할 때 사용하는 것들을 예로 들 수 있고 나머지는 복합자료구조인데 이는 다시 선형 자료구조와 비선형 자료구조로 나뉜다. 선형 자료구조는 메모리내에 데이터들이 순차적으로 나열되어 있는 것이고, 비선형 자료구조는 메모리내에 여기저기 흩어져 있는 형태를 말한다. 선형자료구조는 다시 생성 시 크기가 고정되는 정적 자료구조와 실행 중에 크기가 유동적으로 변할 수 있는 동적 자료구조로 나뉜다. 배열과 리스트는 프로그래밍 언어에서 제공하는 자료구조인 내장형이고 나머지는 개발자가 직접정의하여 사용하는 사용자정의형 자료구조이다. 이 글에서는 정적 자료구조 중 대표적인 배열에 대해 정리하는 시간을 가져보도록 하겠다.
배열
- 차례, 순서와 관련된 기본적인 자료구조
- 데이터의 메모리공간에서의 물리적위치를 순서적으로 결정함.
- 인덱스와 원소값 <index, value>의 쌍으로 구성된 집합.
- index : 컴퓨터 내부구조나 메모리 주소와 무관하게 이해하기 쉽도록 개발자에 의해 개념적으로 정의된 값.
예를들어 크기가 6인 int형 배열 a가 있다고 해보자. 배열의 인덱스는 0번부터 시작하여 (배열의 크기 -1)의 값으로 표현된다.
0x1000 과 같은 것은 배열의 시작주소로 예를 든것인데, 나머지 항목들의 메모리 위치를 알고자 한다면 int형 배열이므로 각 데이터는 4bytes 의 크기를 갖는다. 위 그림에서 항목의 메모리 위치 = 배열 시작주소 + (index x 4)로 알 수 있다.
배열의 특징
- 데이터들이 모두 같은 자료형, 같은 기억공간의 크기를 갖는다.
- 각 데이터의 물리적인 위치의 순서가 배열의 인덱스 순서와 일치한다.
- 인덱스 값을 이용해 데이터에 접근하는 직접접근이 가능하다.
배열의 장점
- 인덱스로 직접접근이 가능하기에 접근속도가 빠르다.
- 연속된 메모리저장 방식이므로 순차적 데이터 처리가 가능하다.
- 코드를 간결하게 구성할 수 있다. ex) 반복문
배열의 단점
- 데이터의 삽입, 삭제가 어렵다. 중간에 삽입 또는 삭제를 할 경우 데이터이동이 많아지기 때문에..
- 최초로 크기가 지정된 후 크기변경이 불가능하다. = 정적배열 (Static Array)
- 메모리의 연속성이 요구되므로 크기가 큰 배열을 생성할 땐 그만큼의 메모리공간이 확보되어야 한다.
리스트
배열의 특징을 보완한 것으로 가장큰 특징은
- 리스트 안에 들어가는 항목값의 데이터 타입을 지정하지 않는다. 서로다른 타입의 데이터를 담을 수 있다.
- 생성할 때 크기를 지정하지 않고 제한을 받지 않는다.
- 동적배열이다.
파이썬의 경우
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 |