티스토리 뷰

요 몇일 자료구조에 관련한 포스팅을 많이 했는데, 돌이켜보니 자료구조란 무엇인가, 왜 사용해야 하는가, 어떤점이 좋고, 어떻게 사용 가능한가 등에 대한 내용은 언급하지 않았었다. 나로서는 알고있는 내용이고 당연하다 생각되었기 때문에 간과했던 부분인데, 그래도 기억력에는 한계가 있고 정리하는 차원에서 하나의 포스팅으로 정리하는게 좋겠다는 판단을 하여, 이렇게 별도의 포스팅으로 작성해보는


자료구조란 무엇인가(Data Structure)


글을 읽는 독자들에게 질문해 봅니다. 자료구조 하면 무엇이 떠오르나요? 흔한 자료구조의 형태로 큐(Queue)나 스택(Stack) 혹은 연결 리스트(Linked List), 트리(Tree) 등을 떠올리거나 선택정렬, 삽입정렬 등등의 정렬 알고리즘등이 먼저 떠오르지 않을까 합니다.


사전적인 의미는 자료(Data)의 집합의 의미하며, 각 원소들이 논리적으로 정의된 규칙에 의해 나열되며 자료에 대한 처리를 효율적으로 수행할 수 있도록 자료를 구분하여 표현한 것이라고 합니다. 이러한 자료구조를 사용하는 목적은 무엇일까요


목적은 명확합니다. 자료를 더 효율적으로 저장하고, 관리하기 위해 사용하며, 잘 선택된 자료구조는 실행시간을 단축시켜주거나 메모리 용량의 절약을 이끌어 낼 수 있습니다.


자료구조의 선택 기준

- 자료의 처리 시간

- 자료의 크기

- 자료의 활용 빈도

- 자료의 갱신 정도

- 프로그램의 용이성


자료의 처리를 보다 효율적으로 하기 위해서 위와 같은 사항을 고려하여 선택, 사용해야 합니다.


자료구조의 특징

1. 효율성

앞서 설명 했듯이 자료구조를 사용하는 목적은 효율적인 데이터의 관리 및 사용입니다. 따라서 적절한 자료구조를 선택하여 사용한다면 업무의 효율이 올라갈 것입니다. 한가지 예를 들어보자면 검색에 대한 알고리즘을 구현할때, 데이터의 양이 많다면 순차 검색(Linear Search)를 사용하는 것 보다 이분 검색(Binary Search)를 활용하는것이 더 효율 적일 것입니다. 왜냐하면 학생이라는 테이블에 학생에 대한 데이터가 100만개 있다고 할때, 순차 검색으로 데이터를 검색하게 되면 운이 좋을때는 1번의 연산으로 찾을 수 있겠지만, 운이 없을경우에는 100만번의연산을 거쳐야 할 것입니다. 이에 반해 이분 검색은 연산의 횟수가 훨씬 줄어들죠. 이와같이 목적에 맞는 자료구조를 사용하는것이 효율적입니다.


2. 추상화

추상화란 복잡한 자료, 모듈, 시스템 등으로 부터 핵심적인 개념만 간추려 내는 것입니다. 자료구조를 구현할 때 중요한 것은 어느 시점에 데이터를 삽입할 것이며, 어느 시점에 이러한 데이터를 어떻게 사용할것인지에 대해서 초점을 맞출수 있기 때문에 구현 외적인 부분에 더 시간을 쏟을 수 있습니다. 알고리즘 자체에는 중점을 두지 않습니다.


마찬가지로 자료구조 내부의 구현은 중요하지 않습니다. 어떻게 구현했는지 보다 어떻게 사용해야 하는지를 알고 있어야 합니다.


예를들어 스택(Stack)의 경우 먼저 들어간것이 나중에 나오는 FILO(First In Last Out)의 형태를 가지고 있습니다. 그리고 push() 함수를 이용해서 데이터를 삽입할 수 있고, pop() 함수를 이용해서 데이터를 추출할 수 있습니다. 그 함수 내부 구현이 어떻게 되었는지는 중요하지 않습니다. 사람마다 다른 코드를 작성할 것이고, 사용 언어, 개발 툴등 환경적인 변수에 의해서 다른 코드가 나올 것이기 때문에 추상적인 개념에 대해서만 이해하고 있다면 사용할 수 있습니다.


3. 재사용성

자료구조를 설계할때 특정 프로그램에서만 동작하게 설계하지는 않습니다. 다양한 프로그램에서 동작할 수 있도록 범용성 있게 설계하기 때문에 해당 프로젝트가 아닌 다른 프로젝트에서도 사용할 수 있습니다.


자료구조의 분류

자료구조는 크게 선형 자료구조와 비선형 자료구조로 나뉩니다. 선형 자료구조의 경우 데이터가 일렬로 나열되어 있는 것을 뜻하고, 비 선형 자료구조는 특정한 형태를 띄고 있는 것을 뜻하는데, 각각에 해당하는 자료구조는 아래와 같습니다.


선형구조

- 배열(Array)

- 연결 리스트(Linked List)

- 스택(Stack)

- 큐(Queue)


비선형 구조

- 트리(Tree)

- 그래프(Graph)


자료구조의 가장 기초적인 자료구조란? 이라는 주제에 대하여 뒤늦게 알아보았습니다.

댓글
댓글쓰기 폼