자료구조란 — 왜 중요한가
이 토픽을 마치면
자료구조가 무엇인지 설명할 수 있고, 왜 "데이터를 어떻게 저장하느냐"가 프로그램의 성능을 결정하는지 알게 됩니다.
같은 데이터, 다른 성능
전화번호부를 생각해봅시다. 1000명의 이름과 전화번호가 있습니다.
방법 A: 종이에 순서 없이 적기
- "김훈"을 찾으려면? → 처음부터 하나씩 확인. 최악의 경우 1000번
방법 B: 가나다순으로 정렬
- "김훈"을 찾으려면? → 중간을 펼쳐서 비교, 절반씩 좁혀감. 최대 10번이면 찾음
데이터는 똑같습니다. 저장하고 정리하는 방식이 다를 뿐인데, 검색 속도가 100배 차이납니다.
이것이 **자료구조(Data Structure)**의 핵심입니다 — 데이터를 어떤 형태로 조직하느냐에 따라 연산의 효율이 달라집니다.
자료구조의 기본 종류
text
선형 자료구조 (한 줄로 늘어선 것)
├── 배열 (Array) — 연속된 칸에 순서대로
├── 연결 리스트 — 각 칸이 다음 칸을 가리킴
├── 스택 (Stack) — 위에서만 넣고 빼기
└── 큐 (Queue) — 뒤에서 넣고 앞에서 빼기
비선형 자료구조 (가지가 갈라지는 것)
├── 트리 (Tree) — 계층 구조
├── 그래프 (Graph) — 자유로운 연결
└── 해시 테이블 — 키로 바로 접근왜 하나만 쓰면 안 되는가
배열이 만능이면 다른 자료구조는 필요 없겠죠. 하지만 각 구조마다 잘하는 것과 못하는 것이 있습니다.
| 연산 | 배열 | 연결 리스트 | 해시 테이블 |
|---|---|---|---|
| 인덱스로 접근 | 빠름 | 느림 | — |
| 검색 | 느림 | 느림 | 빠름 |
| 삽입/삭제 | 느림 | 빠름 | 빠름 |
"이 프로그램은 검색을 많이 하니까 해시 테이블", "순서가 중요하니까 배열" — 상황에 맞는 자료구조를 고르는 것이 프로그래머의 판단입니다.
자료구조 + 알고리즘 = 프로그램
유명한 공식이 있습니다:
프로그램 = 자료구조 + 알고리즘 — 니클라우스 비르트 (Pascal 언어 창시자)
자료구조는 데이터를 담는 그릇이고, 알고리즘은 그 그릇에서 데이터를 처리하는 방법입니다. 좋은 그릇에 좋은 요리법을 쓰면 효율적인 프로그램이 됩니다.
실무에서 왜 중요한가
python
# 리스트에서 검색 — O(n), 데이터가 많으면 느림users = ["김훈", "이수", "박진", ...] # 100만 명"김훈" in users # 최악 100만 번 비교
# 딕셔너리(해시 테이블)에서 검색 — O(1), 거의 즉시users = {"김훈": "010-1234", "이수": "010-5678", ...}users["김훈"] # 한 번에 찾음100만 명의 사용자가 있을 때, 자료구조 선택 하나로 100만 번 vs 1번의 차이가 납니다. 이것이 자료구조를 배워야 하는 이유입니다.