자료구조
물건마다 알맞은 서랍과 옷걸이가 따로 있듯이, 컴퓨터 속 데이터를 목적에 맞게 담아두는 '맞춤형 정리함'이에요.
정의 자료구조는 컴퓨터 메모리 안에 데이터를 무작정 쌓아두지 않고, 필요할 때 빠르고 정확하게 찾아 쓰도록 돕는 다양한 형태의 정리 규칙이에요. 수납 목적에 따라 서랍장의 칸막이 모양을 다르게 만들듯이, 데이터의 성격과 사용 목적에 맞춰 최적의 구조를 설계해요.
왜 한 가지 서랍만 쓰지 않을까요?
옷장을 정리할 때 양말, 외투, 바지를 모두 똑같은 크기의 네모 상자에 쑤셔 넣는다면 어떻게 될까요? 원하는 옷을 한 벌 찾을 때마다 상자 속을 전부 뒤집어야 해서 시간이 한참 걸릴 거예요.
컴퓨터도 똑같아요. 메모리(컴퓨터의 기억 공간)라는 거대한 창고 안에 수천만 개의 정보가 뒤섞여 있다면, 원하는 값을 찾느라 컴퓨터가 버벅거리게 돼요. 그래서 프로그래머들은 데이터를 목적에 맞게 담을 수 있는 전용 수납 방식을 고안했어요.
이러한 데이터 수납 방식들의 규격을 통틀어 자료구조라고 불러요. 일렬로 번호를 붙여 꽂아두는 책장 같은 구조부터, 접시처럼 차곡차곡 위로 쌓아 올리는 구조까지 다양한 정리 틀이 준비되어 있답니다.
목적에 따라 갈리는 대표적인 정리함들
가장 친숙한 방식은 번호표를 매겨 순서대로 나열하는 배열(Array)이에요. 아파트 동호수처럼 번호만 알면 원하는 위치의 데이터를 즉시 찾을 수 있어요. 하지만 중간에 새 데이터를 끼워 넣으려면 뒤쪽 칸을 전부 한 칸씩 밀어내야 하는 번거로움이 있죠.
반면 뷔페 식당의 접시 더미처럼 위에서만 넣고 빼는 스택(Stack)은 가장 나중에 들어온 데이터를 가장 먼저 꺼낼 때 유용해요. 우리가 인터넷을 돌아다닐 때 누르는 웹 브라우저의 뒤로 가기 기능이 바로 이 스택 구조로 작동해요.
반대로 놀이공원 줄서기처럼 먼저 들어온 순서대로 데이터를 내보내는 큐(Queue)도 있어요. 프린터의 인쇄 대기열이나 식당의 번호표 시스템은 모두 이 큐 방식으로 작동하며 공평하게 차례를 지켜줘요.
조금 더 정확히 말하면
조금 더 정확히 말하면, 세상에 모든 상황을 만족시키는 완벽한 만능 자료구조는 없어요. 데이터를 찾는 속도가 번개처럼 빠르면 새로운 데이터를 추가할 때 시간이 오래 걸리거나, 더 많은 메모리 공간을 소모하는 식의 맞교환(트레이드오프)이 항상 발생하기 때문이에요.
예를 들어 사전처럼 단어와 뜻을 짝지어두는 해시 테이블(Hash Table)은 검색이 매우 빠르지만 빈자리를 많이 만들어두어야 해서 메모리를 많이 차지해요. 나뭇가지처럼 갈라지는 트리(Tree) 구조는 방대한 데이터 속에서도 빠르게 길을 찾아내지만 구조를 처음 만들고 관리하기가 까다롭죠.
결국 프로그래머는 문제를 해결하는 계산 절차인 알고리즘을 짜기 전에, 어떤 자료구조에 데이터를 담아야 컴퓨터의 자원을 가장 아낄 수 있을지 신중하게 선택해요.
🤔 흔한 오해
모든 작업에서 가장 빠르고 완벽한 최고의 자료구조가 하나쯤 존재한다.
어떤 자료구조든 장점과 단점이 함께 존재해요. 검색이 빠르면 저장이 느리거나 메모리를 더 많이 쓰는 식의 균형(트레이드오프)을 고려해 상황에 맞게 골라 써야 해요.
🧺 일상에서 만나요
자료구조는 데이터를 컴퓨터 메모리에 가장 효율적으로 보관하고 꺼내 쓰기 위한 맞춤형 정리 규칙이에요.