자료구조 : 데이터를 관리하는 여러가지 방법

파스칼을 개발한 스위스의 컴퓨터 과학자 니클라우스 비르트는 이런 말을 남겼다.

알고리즘 + 자료구조 = 프로그램

그만큼 프로그램에서 중요한 두 가지 중 하나가 자료구조라는 점인데,

사실 개발을 배우는 단계에서는 자료구조에 대해서 전혀 신경을 쓰지 않았다.

 

더군다나 프론트엔드 개발자는 그냥 서버에서 데이터 받아와서 잘 뿌려주면 되는거 아닌가?

같은 이따위 생각을 하고 있었다가 최근 프론트엔드 개발자 채용에도 코테가 접목 되는 부분도 그렇고,

최적화나 복잡해지는 기능에 대해서 접근 할 때, 자료구조에 대한 이해가 있어야 해당 상황에

가장 적합한 자료구조를 적용할 수 있기에 이젠 꼭 알아야 하는 개념이 되겠다.

 


 

자료구조(Data Structures)란?

자료구조는 컴퓨터가 데이터를 효율적으로 관리할 수 있도록 도와주는 데이터 보관 방법을 의미한다.

 

일상과 연관지어 예를 들어보자면 지금 내 핸드폰을 켜서 어플들을 어떻게 정리했는지 보자.

어떤 사람은 어플을 설치한 그대로 나열되어 있는 사람도 있을 수 있고,

어떤 사람은 어플 아이콘의 색에 따라서 폴더를 구성해 정리한 사람도 있을 수 있고,

어떤 사람은 어플의 특징에 따라서 폴더를 구성해 정리한 사람도 있을 수 있다.

 

이렇게 여러 어플을 특정 기준에 따라서 관리하게 되면 어떤 장점이 있을까?

가장 큰 장점은 내가 원하는 어플을 내가 세운 기준에 따라 빠르게 찾을 수 있다는 점이다.

그냥 가계부 어플을 찾는거 보다, 금융 폴더 안에 있는 가계부 어플을 찾는 것 처럼 말이다.

 

컴퓨터에서도 마찬가지로 다양한 데이터를 효율적으로 관리하기 위해 자료구조라는 개념을 활용한다.

각 자료구조는 특정한 데이터 유형과 사용 목적에 따라 고유한 특성과 규칙을 가지며,

이를 통해 데이터의 저장, 접근, 수정, 삭제를 빠르게 처리할 수 있도록 한다.

 

자료구조의 종류

 

이미지 출처 : https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS2832062046

자료구조를 구분하는 내용을 보면 가장 먼저 단순, 복합으로 나눌 수 있는데

여기서 단순구조는 정수, 실수, 문자, 문자열 등 기본적으로 컴퓨터가 제공하는 자료형을 말한다.

그래서 보통 자료구조에 대해 얘기하면 크게 선형 자료구조비선형 자료구조로 나누게 된다.

 

728x90

 

선형 자료구조

선형 자료구조는 데이터가 일렬로 연결된 형태로, 각 요소가 순차적으로 배치되는 구조다.

종류로는 배열, 연결리스트, 스택, 큐가 있다.

 

_배열

배열은 연속된 공간에 데이터를 저장하는 구조로 인덱스를 통해 특정 위치 데이터에 접근한다.

그래서 특정 인덱스에 접근할 때 시간 복잡도는 O(1)이다.

 

_연결 리스트

노드들이 각 데이터마다 포인터로 연결된 구조로 노드가 삽입되면 링크로 연결된다.

특정 노드에 도달할 때가지 순차 탐색하는 구조기에 시간 복잡도는 O(n)이다.

 

_스택

가장 나중에 들어온 데이터가 가장 먼저 나가는 LIFO 방식의 자료구조다.

 

_큐

가장 먼저 들어온 데이터가 가장 먼저 나가는 FIFO 방식의 자료구조다.

 

비선형 자료구조

비선형 자료구조는 데이터가 일렬이 아닌 계층적 구조로 배치되어 다양한 관계를 나타낼 수 있는 자료구조다.

종류로는 트리와 그래프가 있다.

 

_트리

구조의 형태가 나무 모양과 유사하다고 해서 붙여진 트리 자료구조는

루트 노드에서 시작하여 자식 노드로 확장된다.

종류로는 이진 트리, 이진 탐색 트리(BST), AVL 트리, 힙 등이 있다.

 

_그래프

노드(정점)와 간선(엣지)으로 구성된 자료구조로, 복잡한 관계를 표현할 수 있다.

 


 

간단하게 자료구조에 대해서 알아봤는데 자료구조는 각각의 특징에 따라 활용할 수 있는 상황이 다르다.

예를 들어 텍스트 편집기에서 되돌리기 기능을 구현한다고 가정했을 때,

여러개의 자료구조 중 가장 최근에 한 작업부터 되돌려져야 하기에 스택 자료구조를 활용하는 것이 좋다.

 

이처럼 다양한 자료구조에 대한 이해와 활용을 할 수 있다면,

특정 기능을 구현할 때 가장 적합한 자료구조를 활용해 불필요한 메모리 낭비 없이

효율적으로 데이터를 관리할 수 있겠다.

 

포스팅 작성에 참고한 감사한 글들

보통의 개발자 블로그 : 자료구조 개념 및 종류 정리

re-code-cord 블로그 : 자료구조? 왜 그렇게 중요할까

한빛출판네트워크 : 자료구조의 개념과 종류

 

'CS > Data Structures' 카테고리의 다른 글

스택과 큐 : 상하차와 컨베이어 벨트  (0) 2024.11.13