배열: 같은 타입의 변수들로 이루어진 유한 집합으로 정의된다. 배열을 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자는 인덱스(index)라고 한다.
현실에서 배열이 어떻게 사용되고 있는지 한번 생각해보자
대부분에 사람들이 살고 있는 아파트를 보면 '101호, '201호, '301호', '401호'.......... 이렇게 똑같은 구조의 집이 차곡차곡 차례대로 쌓여있는 것을 볼 수 있다.
여기서 '아파트의 호수'는 배열의 인덱스로 표현되고, '아파트'는 배열의 요소라고 비유할 수 있다.
배열은 배열을 선언하는 형식에 따라 1차원 배열, 2차원 배열, 다차원 배열로 나누어지는데, 현실적으로 이해하기 쉬운 2차원 배열까지 사용된다.
오늘 알아볼 배열의 목차는 다음과 같다.
1. 배열의 원소 저장 방식
2. 1차원 배열
3. 2차원 배열
배열의 원소 저장 방식
배열의 원소들이 메모리에 적재(저장)되는 방식에는 몇가지 특징이 존재하는데, 다음과 같다.
- Each variable in the collection is of the same data typeNote: that means that the size (number of bytes) of each variable is the same
- The variables are placed (stored) consecutively in memory
1. 각각의 배열의 원소들의 데이터 타입(크기)은 같다.
- 오른쪽 메모리에 배열의 원소들이 적재(저장)되어 있는 바이트의 크기는 모두 동일하다는 것을 나타낸다.
2. 각각의 배열의 원소들은 연속적으로 메모리에 저장된다.
- 오른쪽 메모리에 배열의 원소들은 Top-down 방식을 이용해 연속적으로 적재(저장)되어 있다.
2가지 특징 이외에 또 다른 특징들이 존재하는데 이는 다음과 같다.
- The array contains a fixed number of elements -> length of the array = number of elements in the array
- The first element of an array has the index 0, if we know the location of the first element of an array, we can locate any other element of the array through its index
3. 배열은 항상 고정된 배열의 길이를 포함하여야 한다.
- 배열을 생성할 때 항상 고정된 배열의 길이를 선언해야한다.
4. 배열의 첫번째 요소의 인덱스는 0이다.
- 모든 배열의 첫번째 요소의 인덱스는 0부터 시작하며, 요소가 증가할 수록 짝을 이루는 인덱스도 순서대로 1씩 증가한다. 그렇기 때문에 첫번째 요소의 인덱스 위치를 알고 있다면, 다른 요소들도 인덱스를 통하여 배열내에 포함시킬 수 있다.
5. 모든 배열은 메모리 상의 참조할 수 있는 주소 값을 가지고 있다.
- 모든 배열은 메모리에 상의 참조할 수 있는 주소값이 주어진다.
이제부터는 코드를 통해 어떻게 배열을 생성하고, 배열의 요소들에 접근하여 값을 수정하고 삭제할 수 있는지에 대해서 알아보자.
1차원 배열
* Java를 기준으로 작성되었습니다.
1차원 배열은 가장 기본적인 배열로 다음과 같은 문법에 따라 선언된다.
타입 [] 배열이름 = new 연산자[배열의 길이];
타입: 배열 요소로 들어가는 변수의 타입을 명시한다.
배열이름: 배열이 선언된 후에 배열로 접근하기 위해 사용된다. 배열 주소값이 스택영역에 저장된다.
new 연산자: 메모리(Heap 영역)에 데이터를 저장할 공간을 할당받는다.
배열의 길이: 해당 배열이 몇개의 배열 요소를 가지게 되는지 명시한다.
위에 있는 코드를 그림으로 표현하면 다음과 같다.
현재 배열안에는 아무런 요소(값)들이 들어있지 않고, 빈 배열로 선언이 되어있는 상태이다.
String[] arr를 선언했을 때 Stack 영역에 배열의 주소값이 적재되고, new String[5]를 선언할 때 Heap 영역에 메모리 공간을 만들게 된다.
배열을 적재적소에 맞게 사용하기 위해서는 적합한 요소(값)들을 초기화해야 한다. 다음 코드는 배열의 요소(값)을 초기화 하는 단계이다.
항상 인덱스는 0부터 시작이 되므로 '배열이름[인덱스]' 문법구조를 사용하여 배열 요소(값)를 초기화 할 수 있다.
그림을 통해 자세히 알아보자.
초기화한 배열 요소들은 배열 내에 저장된다.
추후 배열의 요소(값)의 수정 or 삭제를 하기위해 접근할 때, Stack 영역에 저장되어 있는 배열의 주소값을 참조하여, 배열의 요소(값)의 접근하게 된다.
배열내에 요소 값에 접근하기 위해서는 '배열이름[인덱스]' 문법을 사용하면 쉽게 접근이 가능하다.
인덱스를 적지 않고, 배열이름에 접근하게되면, Stack 영역에 저장되어 있는 배열 주소의 값이 출력된다.
2차원 배열
2차원 배열은 1차원 배열의 배열 요소로 또 다른 1차원 배열을 사용하여 나타내는 배열이다.
다음과 같은 문법에 따라 선언할 수 있다.
타입 [][] 배열이름 = new 연산자[열의 길이][행의 길이];
1차원 배열과 선언하는 방식은 거의 비슷하지만, 2차원 배열이기 때문에 열과 행이 존재한다.
그림으로 도식화 해보면 다음과 같다.
2차원 배열에서 배열 요소의 값의 접근할때는 열의 인덱스 값과 행의 인덱스 값 을 입력해주어야 한다.
< 참고자료 >
[도서] 자료구조 - 정광식 지음-
http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/09/basics.html
<Data structures> chapter 2, 배열(Array) end
'CS(Computer science) > 자료구조&알고리즘' 카테고리의 다른 글
그래프(Graph) (0) | 2020.01.01 |
---|---|
Hash(해시) (0) | 2020.01.01 |
Stack vs Queue (0) | 2020.01.01 |
Array vs ArrayList vs LinkedList (0) | 2019.12.31 |
자료구조란 (0) | 2019.11.23 |