[그림으로 배우는 자료구조] 배열이란?

[그림으로 배우는 자료구조] 배열이란?

 

 

이번 시간에는 배열에 대해서 학습해봅시다.

 

학자들은 변수를 이용해서 메모리에 값을 쉽게 할당하고 CPU에게 값을 계산을 시켰습니다.

 

그런데 문제가 발생했습니다.

 

 

메모리에 저장해야 될 값의 개수가 많아지면 변수의 수도 많아지게 된것입니다.

 

달력 기능을 구현할 때를 예를 들면 한달에 1일부터 최대 31일까지 있기 때문에 1부터 31까지 숫자를 저장할 변수를 31개 작성해야했습니다.

 

 

학자들은 어떻게 하면 변수를 많이 안쓰고 같은 종류의 데이터를 쉽고 효율적으로 메모리에 저장할 수 있을지를 고민했습니다.

 

고민 끝에 학자들은 배열이라는 개념을 만들었습니다.

 

배열은 같은 종류의 데이터를 모아서 메모리에 순서대로 저장하는 기법입니다.

 

 

배열은 요소(element)와 색인(index)으로 구성되어 있습니다. 요소는 배열 안에 담겨있는 하나하나의 요소를 말합니다. 배열 안의 각각의 요소는 서로 동일한 데이터 타입이어야 합니다.

색인(index)은 배열의 오프셋(offset)입니다. n개 요소를 가진 배열의 색인(index)은 0부터 시작해서 n-1 까지 입니다.

 

 

배열의 요소들은 연속된 메모리 영역에 순서대로 저장이 됩니다.

 

배열의 각 요소들은 연속된 영역에 저장되기 때문에 색인(index)을 이용해서 메모리의 주소를 계산할 수 있고 색인(index)을 사용해서 요소(element)에 바로 접근할 수 있습니다.

 

배열은 특정 요소에 접근하는 속도는 빠르지만 특정 요소를 추가하고 삭제하는 작업은 시간이 오래 걸립니다.

 

특정 요소를 index 1번 위치에 추가하기 위해서 배열의 마지막에 데이터 추가를 위한 공간을 생성합니다.

 

 

두번째 요소 2와 세번째 요소 3을 우측으로 한칸씩 이동 시킨 후 빈 공간에 새로운 요소 7을 추가합니다.

 

 

특정 요소 7을 삭제할 때는 해당 요소를 삭제한 후 남은 요소들을 옆으로 한칸씩 이동 시킵니다. 그리고 마지막으로 빈 공간을 삭제합니다.

이처럼 배열은 특정 요소에 접근하는 것은 빠르지만, 요소를 추가하고 삭제하는 작업에는 오버헤드가 큰 특징이 있습니다.

 

 

참고

코딩퀴즈 - ios

https://apps.apple.com/kr/app/%EC%BD%94%EB%94%A9%ED%80%B4%EC%A6%88/id1625309702

코딩퀴즈 - aos

https://play.google.com/store/apps/details?id=com.codingquiz.myapplication