배열
번호표가 붙은 칸막이 약통처럼, 같은 크기의 방을 나란히 붙여 물건을 번호 순서대로 보관하는 정리함이에요.
정의 컴퓨터 기억 장치(메모리)에 같은 종류의 데이터를 빈틈없이 일렬로 이어 붙여 보관하는 가장 기본적인 정리 상자예요. 각 칸마다 번호표(인덱스)가 매겨져 있어서, 몇 번째 칸이든 순서표만 대면 기다리지 않고 바로 내용을 꺼내볼 수 있어요.
칸막이 약통에 알약을 넣는 법
월요일부터 일요일까지 요일이 적힌 칸막이 약통을 떠올려 보세요. 각 요일 칸에는 정해진 알약이 쏙 들어가고, 칸들은 중간에 빈틈없이 딱 붙어 있어요.
컴퓨터도 데이터를 보관할 때 이런 약통을 자주 만들어요. 이것이 바로 배열이에요. 배열을 만들면 컴퓨터는 메모리 안에 같은 크기의 방들을 컴퓨터 메모리에 연속으로 나란히 마련해 둬요. 방들이 붙어 있기 때문에 컴퓨터가 데이터를 관리하기가 무척 깔끔해져요.
재미있는 점은 컴퓨터의 약통 번호표(인덱스)가 보통 0번부터 시작한다는 사실이에요. 첫 번째 칸은 0번 방, 두 번째 칸은 1번 방이 돼요. 일상생활에서는 1부터 세지만, 컴퓨터는 '시작 지점에서 얼마나 떨어져 있는가'를 따지기 때문에 시작점 자체를 0번으로 부른답니다.
번호만 알면 단번에 찾아가는 비결
수납장에 물건이 여기저기 흩어져 있다면 원하는 물건을 찾기 위해 온 집안을 다 뒤져야 해요. 하지만 일정한 크기의 서랍이 줄지어 있다면 어떨까요? 몇 번째 서랍인지 번호만 알면 눈 감고도 바로 그 서랍을 열 수 있죠.
배열의 가장 강력한 장점이 바로 이 빠른 조회 속도예요. 컴퓨터는 첫 번째 방의 위치와 방 하나의 크기만 알고 있으면 간단한 곱셈 계산으로 특정 방의 주소를 즉시 알아내요. 예를 들어 5번째 방을 찾고 싶다면 시작 위치에서 '방 크기 곱하기 5'를 더해 한 번에 이동하는 식이에요.
이 덕분에 데이터가 10개 있든 100만 개 있든 원하는 번호의 칸을 찾는 데 걸리는 시간이 똑같아요. 이를 컴퓨터 과학에서는 순서대로 뒤지지 않고 단번에 찾아가는 '임의 접근'이라고 불러요.
조금 더 정확히 말하면: 중간에 끼워 넣기는 힘들어요
하지만 배열에도 뚜렷한 약점이 있어요. 꽉 찬 약통의 수요일과 목요일 사이에 새로운 알약을 억지로 집어넣으려면 어떻게 해야 할까요? 목요일부터 일요일까지 들어있던 알약들을 전부 오른쪽으로 한 칸씩 밀어내야 비로소 빈자리가 생겨요.
배열도 마찬가지예요. 맨 앞이나 중간에 새로운 데이터를 추가하려면 뒤에 있는 모든 데이터를 하나씩 뒤로 옮겨야 해요. 반대로 중간에 있는 데이터를 지우면 빈자리를 메우기 위해 뒤쪽 데이터들을 전부 앞으로 당겨와야 하죠. 그래서 데이터를 끼워 넣거나 삭제할 때 시간이 오래 걸리는 부담이 있어요.
처음에 만든 방의 개수를 도중에 늘리거나 줄이기 어렵다는 점도 한계예요. 상자가 꽉 차면 더 큰 새 상자를 만들어서 기존 데이터를 전부 옮겨 담아야 하거든요. 그래서 자주 크기가 바뀌거나 중간 삽입이 많은 작업에는 배열 대신 다른 보관 방식(연결 리스트 등)을 함께 쓰기도 해요.
🤔 흔한 오해
배열의 첫 번째 칸 번호는 당연히 1번이다.
대부분의 프로그래밍 언어에서 첫 번째 칸의 번호(인덱스)는 0번이에요. 시작점으로부터 '얼마나 떨어져 있는가(거리)'를 기준으로 주소를 계산하기 때문이에요.
🧺 일상에서 만나요
배열은 메모리에 데이터를 빈틈없이 나란히 줄 세워 번호표로 단번에 찾아내는 가장 기초적인 자료구조예요.