본문 바로가기
1. CS(Computer Science) 기초 지식/자료구조 및 알고리즘

데이터 처리의 주춧돌, 자료구조와 알고리즘을 공부해야 하는 이유

by 심플리Do 2026. 6. 11.

컴퓨터공학을 전공하면서 가장 많이 듣는 단어를 꼽으라면 단연 '자료구조'와 '알고리즘'일 것이다.

단순히 학점을 잘 받기 위한 과목을 넘어, 현업에서도 뛰어난 엔지니어를 가르는 기준으로 이 두 가지를 꼽는다.

 

새로운 프레임워크와 라이브러리가 쏟아지는 트렌드 속에서도

왜 우리는 여전히 가장 기본인 자료구조와 알고리즘을 깊이 있게 파고들어야 할까?

그 본질적인 이유와 효율성을 평가하는 기준을 정리해 본다.

 

1. 자료구조와 알고리즘의 본질

쉽게 비유하자면, 자료구조(Data Structure)는 데이터를 담는 상자이고,

알고리즘(Algorithm)은 그 상자를 활용해 문제를 해결하는 단계적 절차이다.

 

  • 자료구조:
    • 데이터를 메모리에 어떻게 조직화하고 저장할 것인가에 대한 고민의 결과물이다.
    • 배열, 연결 리스트, 스택, 큐, 트리, 그래프 등 다양한 형태가 존재하며, 각각의 구조는 특정 상황에서 강점과 약점을 가진다.
  • 알고리즘:
    • 주어진 입력 데이터를 가지고 원하는 출력 결과를 얻기 위해 수행하는 명확한 계산 절차이다.
    • 올바른 알고리즘은 정해진 시간 내에 정확한 답을 도출해야 한다.

요리사에 비유하자면

자료구조는 다양한 주방 도구와 재료 정리법이고,

알고리즘은 요리를 완성하는 레시피와 같다.

 

아무리 좋은 재료(데이터)가 있어도,

이를 엉망으로 보관하거나 잘못된 순서로 조리하면 원하는 요리를 빠르게 만들어낼 수 없다.

 

2. 왜 공부해야 하는가: 효율성과 확장성

현대의 컴퓨터는 하드웨어 성능이 압도적으로 좋아졌다.

하지만 처리해야 할 데이터의 양(Big Data)은 그보다 훨씬 더 폭발적으로 증가했다.

 

데이터가 10개, 100개일 때는 어떤 자료구조와 알고리즘을 쓰든 밀리초($ms$) 단위로 처리가 끝난다.

하지만 데이터가 1,000만 개, 1억 개로 늘어나는 순간, 잘못 설계된 코드는 시스템을 마비시킨다.

  • 자원의 한계 인정: CPU 연산 속도와 메모리 공간은 유한하다. 효율적인 구조와 로직은 서버 비용을 절감하고 서비스의 응답 속도를 높인다.
  • 유지보수와 확장성: 탄탄한 기본기 위에서 작성된 코드는 데이터 규모가 커져도(Scale-out) 안정적으로 동작하며, 동료 개발자가 읽고 이해하기 쉽다.

 

3. 알고리즘의 평가 기준: 복잡도 (Complexity)

알고리즘의 성능을 객체적으로 평가하기 위해 우리는 복잡도(Complexity)라는 개념을 사용한다. 복잡도는 크게 두 가지로 나뉜다.

  1. 시간 복잡도 (Time Complexity): 알고리즘이 실행되는 데 걸리는 시간을 입력 데이터 크기 기준의 연산 횟수로 나타낸 것. (현대 컴퓨팅에서 가장 중요하게 여겨짐)
  2. 공간 복잡도 (Space Complexity): 알고리즘이 실행되는 동안 얼마나 많은 메모리 공간을 사용하는지 나타낸 것.

 

Big-O 표기법 (Asymptotic Notation)

복잡도를 표현할 때는 데이터 증가량에 따른 추세를 보여주는 빅오(Big-O) 표기법을 주로 사용한다.

상수나 중요하지 않은 하위 항은 제외하고, 데이터 크기 $N$이 무한대로 커질 때 가장 지배적인 영향을 미치는 항만 남겨 표기하는 방식이다.

  • O(1) (상수 시간): 입력 데이터 크기와 상관없이 언제나 일정한 시간이 걸린다. (예: 배열의 인덱스 참조)
  • O(log N) (로그 시간): 데이터가 커질 때 연산 횟수가 반으로 줄어들며 늘어난다. 매우 효율적이다. (예: 이진 탐색)
  • O(N) (선형 시간): 데이터 크기에 비례하여 시간이 선형적으로 증가한다. (예: 반복문을 통한 단일 루프 탐색)
  • O(N log N) (선형 로그 시간): 효율적인 정렬 알고리즘들이 대개 여기에 속한다. (예: 병합 정렬, 퀵 정렬)
  • O(N^2) (2차 시간): 데이터가 늘어날 때 연산 횟수가 제곱으로 늘어난다. 데이터가 조금만 커져도 성능이 급격히 떨어진다. (예: 이중 반복문, 버블 정렬)

 

마치며: 나침반을 들고 시작하는 첫걸음

단순히 '동작하는 코드'를 작성하는 것과 '효율적으로 동작하는 코드'를 설계하는 것은 하늘과 땅 차이다.

앞으로 마주할 다양한 자료구조(스택, 큐, 트리 등)와 알고리즘(정렬, 탐색, DP 등)을 분석할 때,

이 Big-O 표기법은 내 코드의 성능을 진단하는 확실한 나침반이 되어줄 것이다.

 

이제 이 Learning Map의 첫 페이지를 넘겼다.

조급해하지 않고 각 구조의 원리와 메커니즘을 하나씩 깊이 있게 파고들며,

실무에서 즉시 꺼내 쓸 수 있는 탄탄한 엔지니어링 기초 체력을 다져나가자.