자료구조란?
자료구조를 왜 알아둬야 할까?
자료구조는 컴퓨터과학에서 알고리즘과 함께 가장 중요한 기초이론이다. 왜 중요할까? 정의를 한번 살펴보면, 자료구조란 데이터에 편리하게 접근하고, 변경하기 위해서 데이터를 저장하거나 조직하는 방법을 말한다. 다시 말해서, 데이터를 얼마나 효율적으로 저장 관리하고 메모리를 절약하거나 실행시간을 단축시키는 등에 목적을 두고 있다는 것이다.
자료구조의 특징
작업의 효율성, 추상화, 재사용성을 증가시키기 위하여 상황에 따른 적절한 자료구조를 선택할 필요가 있다. 대규모 데이터를 관리 및 활용하는 경우에는 특히 더 중요하다고 볼 수 있다.
(1) 효율성 : 상황에 맞는 자료구조를 사용하면 데이터 처리의 효율성이 높아진다. 예를 들어, 사람의 이름과 전화번호 쌍의 데이터가 10,000개가 있으며 이를 배열이라는 자료구조로 만들었다고 하자. 철수의 전화번호를 찾기 위해서는 운 좋으면 바로 찾을 수도 있지만, 운이 없다면 10,000번째에서야 찾을 수 있을 것이다. 이럴 때에는 해시 테이블과 같은 자료구조를 이용하면 조금 더 빠르게 작업을 수행할 수 있다.
(2) 추상화 : 추상화란 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추리는 것을 말한다. 자료구조를 이용할 때 자료구조를 구현하는 자세한 작동원리보다는 사용 방법에 대해서 알고만 있으면 된다. 즉, 언어에 따라 구현한 코드가 차이가 있어도 자료구조의 핵심적인 기능에 대해서 알고 있으면 되기 때문에 언어에 종속적이지 않다는 특징을 갖는다.
(3) 재사용성 : 자료구조를 이용하여 데이터를 처리할 경우 해당 자료구조의 인터페이스만 이용하여 데이터를 처리하도록 하므로 모듈화가 가능하다. 이는 자료구조를 설계할 때 특정 프로그램에 맞춰 설계하지 않고, 다양한 프로그램에서 사용될 수 있도록 범용화에서 설계했기 때문에 가능하다.
자료구조와 알고리즘의 차이는 무엇일까?
간단히 말해서, 자료구조는 데이터를 상황에 맞게 저장하기 위한 구조이고, 알고리즘은 자료구조에 있는 데이터를 활용해 어떠한 문제를 해결하기 위한 여러 방법들의 모임이라고 볼 수 있다.
자료구조의 분류
대부분의 자료구조는 특정한 상황에 놓인 문제를 해결하는 데에 특화되어 있다. 즉, 많은 자료구조를 알아두면 상황에 가장 적합한 자료구조를 빠르게 찾아 문제를 빠르고 정확하게 해결할 수 있다.
단순 구조
정수, 실수, 문자, 문자열 등과 같이 자료값을 사용하기 위해서 기본적으로 컴퓨터가 제공하는 기본 자료형을 의미한다.
선형 구조
자료들 간의 앞뒤 관계가 1:1인 선형 관계를 의미한다.
- 배열(Array) : 가장 기본적인 데이터 구조다. 배열은 인덱스와 인덱스에 해당하는 데이터들로 이루어져 있으며, 생성 시 설정된 셀의 수가 고정된다.
- 연결 리스트(Linked List) : 각 노드가 데이터와 포인터를 가지고 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조이다. 인덱스나 위치와 같은 데이터의 물리적 배치를 사용하지 않고, 다음 노드 연결에 대한 포인터 또는 주소를 사용하는 것이 특징이다.
- 스택(Stack) : LIFO(Last In First Out)의 자료구조이다. 가장 마지막 요소부터 처리하는 방식을 갖고 있다.
- 큐(Queue) : FIFO(First In First Out)의 자료구조이다. 가장 먼저 입력된 요소부터 처리하는 방식을 갖고 있다.
- 덱(Dequeue) : 양쪽에서 모두 삽입/인출이 가능한 자료구조이다.
비선형 구조
자료들 간의 앞뒤 관계가 1:다 또는 다:다인 비선형 관계를 의미한다.
- 트리(Tree) : 부모 노드 밑에 여러 자식 노드가 연결되는 구조로, 자식 노드가 부모가 되어 다시 각각의 자식 노드가 연결되는 재귀적인 형태의 자료구조이다.
- 그래프(Graph) : 노드(Node)/정점(Vertex)과 이들 사이를 연결하는 엣지(Edge)로 구성된 자료구조를 의미한다. 그래프는 방향이 있을 수도 없을 수도 있으며 다양한 구조로 설계된다.
파일 구조
서로 관련있는 필드(Field)로 구성된 레코드(Record) 집합인 파일에 대한 자료구조이다. 보조 기억장치에 데이터가 실제로 기록되는 형태를 말한다. 순차 파일, 색인 파일, 직접 파일 등이 있다.
'Study > CS' 카테고리의 다른 글
객체지향 프로그래밍 (2) | 2022.02.25 |
---|---|
[자료구조] 대표적인 자료구조 정리 (1) | 2022.02.09 |
Software 1.0 vs Software 2.0 (0) | 2021.11.09 |