Table of Contents
Array #
Array(배열)은 High-level Language 에서 여러 개의 데이터를 담기 위한 가장 기본적인 자료구조로 대부분의 언어에서 기본적으로 지원한다. 배열은 아래와 같은 특징을 가지고 있다.
Array의 의미 #
배열; 즉, 연관된 데이터를 하나의 변수에 그룹핑해서 관리하기 위한 방법이다. 하나의 변수에 여러 정보를 담을 수 있고, 반복문과 결합하면 많은 정보도 효율적으로 처리할 수 있는 자료구조이다.
Array(배열)의 특징 #
- 고정된 크기를 가진다.
- (논리)메모리에 연속적으로 배치되어있다.
- 순서가 존재하며 순차적으로 할당된다.
- Random Access를 지원한다.
배열은 다른 자료구조에 비해 간단하게 생성하고 다룰 수 있기 때문에 적은 량의 데이터나 고정된 크기의 데이터를 다룰 경우 많이 사용된다. 하지만 배열은 일정 크기의 메모리가 곧바로 할당되며, 특히 C/C++ 과 같은 언어에서는 특별한 예외처리가 되어 있지 않기 때문에 배열을 잘못 다룰 경우 "Segmantation Fault"와 같은 메세지를 마주할 수 있다.
Array의 구조 #
각 언어별로 배열이 메모리에 할당되는 방식이 조금씩 다르지만 일반적으로 아래와 같은 그림으로 설명할 수 있다.
배열은 N개의 고정 크기의 연속된 자료 저장공간으로 위 그림과 같이 단순한 구조로 되어있으므로, 매우 가볍고 간단하게 여러개의 데이터를 다룰수 있는 기본적인 자료구조이다.
배열은 고정크기를 가지므로 문자열과 같은 가변길이를 가지는 자료형은 배열로 사용할 수 없다. 그러므로 주로 자료의 수가 변동이 없는 경우 많이 사용되며 (논리) 메모리상에 연속되어 저장되기 때문에 0-indexing 을 이용하여 순차적으로 접근 할 수 있을 뿐만 아니라 Random Access도 가능하다. (C/C++에서는 포인터를 이용하여 동적 할당을 할 경우 형변환 작업을 통해 상상도 못할 작업을 수행하는 분들도 있다.)
다만 배열은 앞서 언급한 바와 같이 "고정된 크기의 저장공간" 이므로 배열의 크기를 임의로 늘릴 수 없으며 만약 저장되는 자료의 수가 크기보다 많을 경우 새로 배열을 선언하여 사용하여야 한다. 그러므로 저장될 자료의 수가 유동적인 경우 보통 최대로 들어 올 수 있는 자료의 수를 감안하여 배열로 선언하거나 연결 리스트(Linked List)와 같은 다른 형태의 자료구조를 사용해야한다.
위와같은 배열의 한계로 인해 최근 버전의 언어에서는 C++의 Vector와 JAVA의 ArrayList와 같이 가변 길이의 저장 공간을 가지며 배열의 강력한 인터페이스를 활용 할 수 있는 자료형을 지원한다. (단 위와같은 자료형은 내부적으론 배열보다 매우 복잡한 형태의 구조를 가지고 있으므로 대량의 데이터를 다루기에는 부적합하다)
Array의 활용 #
배열은 위에서 언급한 특성으로 인해 아래와 같은 경우에 많이 사용한다.
- 자료형의 크기가 고정이며, 자료의 수가 고정적이거나 최대 자료의 수를 추측 할 수 있는 경우
- 임시로 사용될 자료 저장공간이 필요한 경우 (간단한 작업 처리)
- 단순한 작업에 사용 할 자료구조 구현 시 (Stack, Binary Tree, k-ary Tree 등)
Array의 한계 #
배열은 인덱스에 따라서 값을 유지하기 때문에 엘리먼트가 삭제돼도 빈자리가 남게 되어 한계가 생긴다. 따라서 이런 경우에 프로그래머가 보다 적합한 데이터 타입을 고안해야한다.
Incoming Links #
Related Data Sciences (DataScience 0) #
Suggested Pages #
- 0.878 스택
- 0.075 DFS
- 0.048 파이썬/라이브러리/numpy
- More suggestions...