오늘은 자료구조와 알고리즘은 무엇이고 왜 배워야하는가? 라는 주제로 포스팅을 진행하려합니다.
자료구조(Data Structure)는 현실을 프로그래밍적으로 표현하기 위해서 필요합니다.
지식이 없는 상태에서 갑자기 현실문제를 컴퓨터로 표현하려면 막막할 것입니다.

예를들어 "회사의 조직도 프로그램을 만들라"는 과업을 받았을 때,
트리 자료구조를 모른다면 무엇부터 시작해야할지 막막할 수도 있습니다.

나무란 어떻게 생겼냐면, 큰 줄기에서 가지로 뻣어나가는 모양입니다.
조직도 마찬가지고, 파일 경로도 마찬가지입니다.
실제로 리눅스 최상위 디렉토리를 root(뿌리)라고 부르기도 합니다. 이처럼 프로그램을 만들 때, 자료구조를 모른다면 과거 선배 개발자들이 날밤새서 해결했던 문제를 똑같이 풀게 될 것입니다.

이번에는 도서관을 예로들어보겠습니다. 아래의 사진처럼 책이 많지 않으면 그냥 대충대충 방치해도 잘 찾을 수 있습니다. 그러나, 책이 1~2권이 아니라 2만 권, 10만 권이 된다면 우리는 분류와 정리를 하게 되겠죠. 마찬가지입니다. 데이터가 1~2개면 그냥 대충 관리해도 되는데, 데이터가 1,000개가 되면 좀 분류해야됩니다. 조금 더 스케일이 커져서 데이터가 1,000,000개쯤 되면 우리는 분류와 정리를 잘 해야 찾으려는 정보를 빨리 찾을 수 있게 됩니다.

많은 데이터를 효율적으로 관리하기 위해서 우리는 자연스럽게 시스템을 개발하게 될 것입니다. 대학생들이라면 익숙하겠죠? 우리에게 수강신청의 고통을 안겨주는 종합정보시스템.. 아무튼, 이런 시스템을 구축하려는 개발자가 자료구조를 모른다면..? 상상하기도 끔찍한 일이 발생되겠죠.

이번에는 알고리즘입니다. 우리가 지하철 최단거리를 구하는 프로그램을 만든다고 가정해봅시다.
어디서 환승하고 어떤 노선을 타야 제일 빨리 가는지 구하는 것이 관건이죠.
그런데, 최단거리 알고리즘을 모르는 상태에서 이 문제를 해결하려면 참 어려울 것이라고 생각합니다.
자, 이제 자료구조와 알고리즘이 얼마나 중요한지 알게되었습니다.
분명 그것들을 몰라도 작은 단위의 프로그램은 개발할 수 있습니다.
그러나 큰 단위나 자료구조 또는 알고리즘이 반드시 들어가야되는 특정 프로그램을 개발하려고 할때 큰 난관에 부딪히게 됩니다. 그것을 감안하였을때, 개발자가 되려한다면 자료구조와 알고리즘을 열심히 공부하는 것이 좋겠습니다.