티스토리 뷰

기본 이론

자료구조

RiKang 2018. 1. 20. 20:07

Table of Contents


개요

효율성

추상화

재사용

분류




1. 개요


 자료구조란 자료를 저장하는 방법을 뜻합니다. 프로그램 대다수가 자료를 저장하고 사용하기 때문에, 자료구조는 프로그래밍에서 빼놓을 수 없는 요소로 분류되며, 프로그래밍 언어를 익힌 후에 학습해야 할 필수 과목 리스트에 항상 올라와 있습니다.


 그런데 사실, 자료구조를 배우고자 하는 분이시라면 이미 자료구조를 사용하고 계실 가능성이 높습니다. C언어, 자바, 파이썬과 같은 언어를 배울 때 사용하는 변수, 배열, 구조체도 자료구조의 일종이기 때문이지요. 여러분들은 언어를 배우실 때 이들을 이용해 자료들을 잘 저장하고 사용해 오셨을 겁니다. 어쩌면 변수와 배열을 이용해 자료를 저장하고 처리할 자신이 있는데, 굳이 자료구조를 배워야 하나 생각하실 수도 있습니다. 하지만 자료구조는 저장을 가능하게 하는 것뿐만 아니라, 더 효율적인 저장, 접근, 처리를 가능하게 만들어 줍니다. 다시 말하면, 올바른 자료구조를 선택하고 활용한 프로그래밍은 효율성과 추상화에서 상당한 강점을 가질 수 있습니다.




2. 효율성


 자료구조에 따라 프로그램의 효율성이 어떻게 달라지는지를 설명하기 위해, 일상생활에서 책을 보관하는 방법으로 예로 들어보겠습니다. 먼저 도서관에서 책을 보관하는 방법을 보면 분류별로 책들을 나누고, 같은 분류의 책끼리는 가나다 순서대로 꽂아놓고 있습니다. 이를 통해 수많은 도서 중에서도 원하는 도서를 빠르게 찾을 수 있습니다. 반대로 집에서 책을 보관할 때는, 책장에 순서 없이 꽂아 넣거나 아예 쌓아놓기도 합니다. 따라서 원하는 도서를 찾으려면 모든 도서 이름을 훑어봐야 하는 경우가 많습니다. 만약 도서의 개수가 같다면, 도서관처럼 정확히 분류하였을 때보다 찾는 속도가 느릴 것입니다.


 그렇다면 도서를 쌓아놓는 방식이 도서관의 방식보다 안 좋은 방식일까요? 항상 그렇지는 않습니다. 찾는 속도뿐만 아니라 보관하는 속도까지 따진다면 말이지요. 도서관 방식에서는 도서를 보관할 곳을 찾기 위해 해당 분류를 찾고, 또 가나다순서까지 따져봐야 합니다. 반대로 책을 쌓아놓는다면 보관할 곳을 찾을 필요 없이 그냥 위에 올려놓으면 끝입니다. 따라서 도서를 꽂아 넣는 횟수가 많을수록 도서관 방식은 비효율적으로 변합니다. 이처럼 도서를 보관할 때에도 경우에 따라 효율적인 방식들이 따로따로 존재하고 있습니다.


 자료를 저장하는 것도 도서를 보관하는 것과 같이 여러 가지 경우로 나뉠 수 있습니다. 그보다 더 다양한 경우들을 맞닥뜨리게 되지요. 그리고 당연히 경우에 따라 효율적인 자료 저장 방식, 즉, 자료구조가 달라질 수 있습니다. 그러므로 다양한 자료구조를 익히고 응용하는 연습을 해봄으로써, 프로그램의 효율성을 향상시킬 수 있습니다.




3. 추상화


 추상화란 주어진 상황을 간결하게 만들어서 이해하기 쉽도록 하는 작업입니다. 자료구조를 활용하면 현실의 상황을 추상화하여 프로그램으로 옮기는 데에 있어서 유리한 점이 생깁니다.


 예를 들어, 놀이공원에서 롤러코스터를 타려고 대기하고 있는 줄을 생각해 보겠습니다. 한 명 이상이 대기할 수 있으므로 변수만으로는 안되고 배열로 저장해야 할 것입니다. 그런데 롤러코스터 줄은 배열에 없는 특징이 있습니다. 바로 '앞에 선 사람이 먼저 대기 줄에서 없어진다.'는 사실입니다. 이를 표현하기 위해선 배열에 저장해 놓은 다음, 주석을 이것저것 달아서 '이 배열은 롤러코스터 대기 줄을 나타내며 앞에 저장된 변수가 뒤에 저장된 변수보다 먼저 처리되어야 한다.'는 점을 표현해야 합니다.


 하지만 자료구조 중 '큐'라는 자료구조를 이용하면 '이건 롤러코스터 대기 큐이다.'라고 간단하게 표현할 수 있습니다. '큐'라는 이름에 이미 앞의 자료가 뒤의 자료보다 먼저 처리되어야 한다는 의미가 담겨있기 때문입니다. 큐에 대해 알고 있는 사람끼리는 정말 간결하면서 이해하기 쉬운 추상화가 되는 것입니다.




4. 재사용


 자료구조가 중요한 또 다른 이유로는 재사용하기 편하다는 점이 있습니다. 자료구조는 자주 사용되는 자료구조일수록 미리 코드가 만들어져 있거나, 혹은 프로그래머가 직접 만들어 놓는 경우가 많습니다. 따라서 그때그때 효율적인 자료구조를 생각해내서 프로그래밍하는 것보다, 이미 개발된 자료구조를 익히고 사용함으로써 효율적인 코딩을 할 수 있습니다.




5. 분류


  자료구조는 꽤 많은 수가 존재하기 때문에, 자료구조를 처음 배우는 시점에 많은 이름을 외울 필요는 없습니다. 중요한 자료구조를 하나하나씩 익히다 보면 저절로 알게 되기 때문입니다. 다만 큰 분류로 선형 자료구조와 비선형 자료구조로 나뉜다는 점 정도는 기억해 두는 것이 좋습니다.


'기본 이론' 카테고리의 다른 글

자료구조  (0) 2018.01.20
시간복잡도  (0) 2018.01.17