프로그래밍/자료구조

[자료구조]자료구조란 무엇일까

진형 2018. 8. 30. 16:10

자료구조라는 것에 대해서 공부하기 전에 개괄적으로 우리는 먼저 '자료구조'라는 것이 무엇인가에 대해서 공부를 할 필요가 있겠습니다. 무슨 공부를 하던지 내가 배우고자 하는 것이 무엇인지 모르고 공부를 한다는 것은 장님이 코끼리를 만지는 것과 같은 이치가 아니겠습니까. 넓은 숲을 먼저 보고 나무를 보러가도록 하겠습니다.


//여기서 적은 모든 글들은 제 주관적인 의견입니다. 잘못된 것이나 추가적으로 반영할 것들이 있으면 댓글로 적어주시면 바로 반영하도록 하겠습니다.


1. 자료구조의 정의

사실 자료구조의 정의는 저도 모르기에 다른 사람들이 정리를 많이 해놓은 위키피디아를 사용하기로 했습니다. 한국 위키피디아에서는 "자료효율적으로 이용할 수 있도록 컴퓨터에 저장하는 방법이다" 라고 되어있습니다. 또한 영어 위키피디아에서는 "In computer science, a data structure is a data organization, management and storage format that enable efficient access and modification" 이렇게 정의되어있습니다.


여기서 가장 핵심적인 단어는 '효율적으로' 와 'efficient' 이 두단어일 것입니다. 즉 자료를 효율적으로 이용하기 위해서 저장하는 방법이 '자료구조'라는 것으로 생각됩니다.


2. 자료구조의 사용

위에서 말한 정의를 토대로 말해보자. 우리는 자료구조라는 것을 많이 공부할 것이다. 'stack', 'queue', 'heap' 등등 많은 자료구조들을 공부할 예정인데, 이 많은 자료구조들은 각각의 특징을 가지고, 이 특징을 사용해서 적절한 곳에 '효율적으로' 사용 되어야 할 것입니다. 그렇기에 우리는 자료구조들의 특징을 공부를 하고 어떻게 작동하는 지에 대해서 정확히 공부할 필요가 있겠습니다.


3. 자료구조 종류

자료구조에는 여러 종류가 있는데, 크게 나누면 내부에 만들어져 있는 자료구조가 있고, 사람들이 만들어낸 자료구조가 있습니다. 내부에 만들어져 있는 자료구조는 'int', 'float' 등등이 있고(이하 자료형), 사람들이 만든 것들은 'array', 'stack', 'queue' 등등(이하 자료구조) 이 있습니다. 헷갈리지 않게 자료형과 자료구조 두가지로 이름을 다르게 부르도록 하겠습니다. 자료구조의 종류는 많은데 우리가 이 카테고리에서 다룰 내용은 'array', 'stack', 'queue', 'linked list', 'array list', 'graph', 'tree', 'binary tree' 등등 기본적인 자료구조들을 공부를 해보려고 합니다.


(크기가 9고 높이가 3인 2진트리)

(출처 : https://en.wikipedia.org/wiki/Binary_tree)


이후에 다룰 모든 내용은 c와 c++을 기본으로 한 언어를 사용할 것입니다. 제가 java나 js같은 것들은 잘 다루지 못하는 이유가 가장 큽니다. 자료구조에 대해서 공부하는 것이 코드를 알기 위해서가 아니고 정의와 특징, 그리고 사용방법을 정확하게 아는 것이 우선이라고 생각하고 봐주셨으면 좋겠습니다.


요약

1. 자료구조는 자료를 효율적으로 이용할 수 있게 컴퓨터에 저장하는 방법이다.

2. 자료구조를 효율적으로 알기 위해서 그 자료구조의 특징을 정확히 알아야한다.

3. 자료구조는 엄청나게 많고, 기본적인 것들을 포스팅할 예정이다.