0. 시작하기 전

Photo by Dakota Roos on Unsplash

0. 시작하기 전

자료구조를 왜 알아야할까?

db's photo
db
·Jun 2, 2022·

5 min read

Table of contents

  • 자료구조를 왜 공부해야 할까?

자료구조를 왜 공부해야 할까?

자료구조가 무엇일까? 나는 개인적으로 어떤 단어를 처음 접했을 때, 먼저 그 단어 자체에서 가능한 연상이나 유추를 먼저 하는 것을 좋아한다. 자료구조를 공부한다는 것은 자료의 구조에 대해 공부한다는 것이다. 그럼 왜 우리는 자료의 구조에 대해 생각해야 하는 걸까?

도서관에서 책을 정리해보자

쉽게 도서관을 생각해보면 좋을 것 같다. 도서관에는 정말 많은 수의 책들이 있다. 그런데 이 책이 무작위로 놓여 있으면, 우리는 원하는 책을 찾지도 못하고 빈손으로 도서관에서 나오게 될 수도 있을 것이다. 그래서 도서관은 책에 식별할 수 있는 번호를 써놓아 순서대로 책장에 넣기로 했다. 그런데 책이 100권밖에 없는 도서관에서는 번호로만 관리해도 별다른 문제가 없었는데, 백만권이 넘는 도서관에서는 참으로 난감할 수 밖에 없다. 어느 한 작가의 책들을 대출하기 위해 검색을 해봤더니, 9981번, 3번, 100000번.... 영리하게 루트를 짠다고 해도, 책을 읽기도 전에 벌써 지치는 느낌이 든다. 그래서 이 도서관에서 최대한 관련성이 짙은 책들을 최대한 모아 놓기 위해 식별코드를 새로 만들어 붙이기로 했다. 인문, 역사 등 분류를 먼저 하고, 저자 이름의 첫글자로 한번 더 분류 한다. 그리고 거기에 책 제목의 첫글자로 한번 더 분류를 하기로 했다. 각 분류 기준 순서대로 식별코드 앞 3자리를 만들고 그 뒤에 책이 들어온 순서대로 번호를 만들어 식별코드 뒷자리를 완성시켜 책을 다시 정리해 놓았다.

여기서 책을 자료라고 생각할 수 있고, 번호나 식별코드를 만들어 집어넣는 방법을 만든 것을 구조를 짰다고 볼 수 있다. 원래 질문으로 돌아가면 자료구조가 왜 중요할까? 번호로 책을 정리한 방법보다는 식별코드로 정리한 방법을 통해 아마 도서관에서 책을 찾는 시간을 훨씬 단축시키고, 내가 읽고 싶은 분야의 책을 읽기 위해 여기저기 불필요하게 이동할 필요도 없다. 물론 처음 책을 정리할 때 혹은 신규책을 도서관에 등록할 때, 식별코드를 만들기 좀 귀찮을 수도 있지만, 책을 등록하는 횟수가 더 많을까? 책을 찾는 횟수가 더 많을까? 당연히 후자일 것이고, 그래서 여기서 식별코드를 사용하는 방법을 선택한 것이다. 그런데 여기서 생각을 해봐야하는 것은 만약 책을 찾는 일이 별로 없다면? 등록하는 일이 훨씬 더 많다면, 과연 식별코드 방법이 효율적일까?

그 때, 그 때 달라요

예를 들어 우리가 책을 펼치면 페이지들이 나온다. 하지만 우리가 이 페이지 번호를 조금더 내용과 관련있는 식별코드를 만들어서 넣을 필요가 있을까? 소설책을 예를들면, 주인공의 극적인 4번째 순간을 나타내는 페이지의 번호를 101쪽 대신 'H(ero)D(ramatic)4' 이렇게 만들어 놓는다면, 아마 우리는 다음에 그 부분을 다시 읽기 위해 엄청난 시간과 노력을 들여야 할 것이다. 앞에서 책을 정리하기 위해 사용했던 효율적인 식별코드 방법은 여기서 너무나도 끔찍하게 비효율적인 방법이 되어 버렸다. 우리가 여기서 알 수 있는 것은 어떤 구조가 무조건 나쁘거나, 무조건 좋다라고 할 수 없다는 것이다.
한가지 예시를 더 들어보자면, 어떤 곳에 집을 지을 때, 그 장소의 기후, 지형 등을 고려해야 한다. 지반이 약한 곳에 고층 아파트를 지을 수 없는 노릇이기 때문이다. 어떤 유형의 집이 무조건 정답이라고 할 수 없다. 상황에 맞는 집을 짓기 위해 고민을 하듯이, 프로그래밍에서도 상황에 맞는 자료구조를 사용하는 것이다.

우리가 자료구조를 배워야 하는 이유

자료 자체의 특성, 자료에 대한 접근 빈도수, 자료를 어떻게 활용할지 등, 우리는 자료를 효율적으로 관리 및 접근하기 위해서 자료구조에 대해 고민하는 것이고, 어떤 구조가 무조건 정답이다라고는 할 수 없다.(물론, 무조건 비효율적인 구조나 최선의 구조는 있을 수 있다.)