자료구조) 0. Intro

사진 설명: 눈이 많이 내리는 환경에서만 유리한 일본 건축물 갓쇼즈쿠리

·

2 min read

개인적으로 모르는 키워드를 접했을 때, 바로 검색하지 않고 그 단어에서 뜻을 유추할 수 있는 단서들을 찾는 것을 좋아합니다. 그럼 시작해볼까요 ㅎ

자료구조란?

자료의 구조. 신체구조를 떠올려 보면 좀 더 쉬울 것 같습니다. 누군가 사람의 신체구조에 대해 물어본다면, 아마 신체를 이루고 있는 구성요소들인 손, 발, 심장 등에 대해 말하고, 각 요소들이 어떤 기능과 역할들을 말하겠죠. 즉, 구조는 어떤 대상이 있고, 그 내부적으로 서로 연결되어 있는 요소들의 관계 및 형태, 그리고 이 대상의 기능들과 동작 원리를 말합니다.

더 좋은 예시로 건물구조가 있습니다. 건물은 기초, 기둥, 벽, 바닥 등으로 구성되어 있고, 보통 환경(기후, 지반 등), 비용, 목적에 따라 다양한 형태가 나옵니다. 이렇게 다양한 건물들은 각기 다른 구조와 설계를 갖고 지어지지만, 모든 건물들이 공통적으로 고려해야 하는 것이 있죠. 바로 안정성입니다. 하지만 안정성은 너무 당연한 것이고, 어떤 건물을 지을지 생각하고 있을 때 어떻게 안정적으로 짓지는 딱히 생각할 필요가 없습니다.
건물 구조는 특히 자료구조와 비슷한 것 같습니다. 리스트, 스택, 큐, 트리 등 다양한 자료구조들 중 상황에 맞게 선택 즉, 최대한 데이터를 효율적으로 사용 가능한 자료구조를 골라야 합니다.
해당 글 커버 사진에 있는 건물은 갓쇼즈쿠리라는 일본의 건축 양식인데, 눈이 지붕 위에 쌓이지 않게 하기 위해 지붕의 경사가 아주 가파릅니다. 폭설이 잦은 시라카와고 마을에서는 매우 적합하지만, 빌딩이 들어오기로 예정되어 있던 눈이 하나도 오지 않는 곳에 이 집을 짓는다면 공간 낭비에 그 땅의 본전도 못 건질 수도 있습니다.

정리하자면, 자료구조도 모든 상황에 적합한 구조가 있는 것이 아니기 때문에, 현재 상황, 예를들어, 다뤄야 하는 데이터가 어떤 특징(타입, 크기 등)을 갖고 있는지, 가용 메모리 크기, 이 데이터를 어떻게 사용할지 등을 고려하여 선택해야 합니다. 그런데 무엇을 골라야 하는지 어떻게 알 수 있을까요??

자료구조를 공부해야 하는 이유

첫번째는 상황에 맞는 자료구조를 고르기 위해 먼저 어떤 선택지가 있는지, 각각의 특징이 무엇인지를 알아야 하기 때문입니다. 우리가 감자를 깎으려고 가위를 사용하지 염두에 두지 않는 것과 비슷한 맥락이라고 생각합니다.

두번째 이유는 불가피합니다. 코드를 다루다 보면, 리스트, 해시 테이블의 구현체 등을 숨쉬듯 사용하게 될 뿐 아니라 대부분의 언어에서 이런 구현체들을 자체적으로 지원해주고 있습니다. 또, 이로 인해 많은 library에서 사용되고 있으니 다시 첫번째 이유로 돌아왔네요.

세번째는 에러 원인을 이해하는데 도움이 될 수 있습니다. 앞서 말한 두 이유와 연관이 있는데요. 아마 제가 그 이유를 설명하는 것보다 가장 유명한 에러들 중 하나인 StackOverflowError 을 던지고 여기서 마무리 짓도록 하겠습니다.

Reference