자바로 배우는 핵심 자료구조와 알고리즘



- 서평시작


“자료구조를 왜 배워야 하는지 모르겠다!”


입사하고 얼마 안되어 “학생 때 배운걸(자료구조, 알고리즘 등) 써먹어 본적이 있는가? “ 라고 나에게 질문을 던지던 회사 선배가 갑자기 떠올랐다. 그 때의 내 대답은 자세히 기억나진 않지만 아마 별로 없다라고 했던것 같다.


실제로 그 이후로 실무 프로젝트를 경험 하면서도 라이브러리나 프레임워크 사용에만 급급해서 자료구조 같은 것에 대해서 생각해 본적도 별로 없긴하다. ‘이미 만들어져 있는걸 간단히 불러와서 사용 할 수 있는데 왜?‘ 라고 생각하면서 말이다.


하지만, 간단한 하던 복잡하던 프로그램을 작성 하면 가끔 왜 라는 질문에 부딪힐 때가 있다. ‘왜 이걸 사용해야 하나? 다른걸 쓰면 안되나?’

사실 상 이유를 분석할 능력이 없어서 ‘이제까지 그냥 쓰던 거니까’ 하고 별 생각 없이 하던 방식을 답습해 왔다.  


옮긴이는 책의 처음에서 “자료구조와 알고리즘에 대한 이해는 소프트웨어의 품질을 높이는 아주 기본적인 작업이다.” 라고 이야기 하며 자료구조를 배워야 하는 이유를 설명 하고 있다.

물론 내가 이미 구현된 레거시 소프트웨어의 병목을 분석 한다던지 하는 일은 없을 것 같지만,  어떤 자료구조를 어떤 상황에서 왜 사용 했는 지 에 대해서 생각해 볼 수 있는 계기는 된듯 하다. (이 책에서는 몇가지 자료구조들에 대한 설명과 이를 구현하기 위한 가이드와 함께 성능을 측정 하는 방법 (단순한 실행 시간 비교가 아닌 계산을 통한 예측) 까지 소개 하고 있다.)


책의 구성 중 모든 구현을 다 소개 하지 않고 가이드만 제공하는 부분은 참 좋았다. 직접 코드를 구현하지 않고 책만 읽어 나가기에는 좀 귀찮은 면도 있었지만, 이 책을 제대로 읽으려면 직접 코드를 작성해 보고, 책에 나오는 외부링크를 같이 읽을 필요가 있어 보인다. (외부링크가 모두 영문이긴 하지만)


자료구조 공부를 위해서는 자료구조의 알고리즘 설명을 듣고 그걸 내 머리속으로 이해 한뒤 그 내용을 내 코드로 옮기는 기술이 필요 한데, 그걸 익히게 하는데 도움을 많이 주었다.


소스 코드를 github 을 통해서 제공하는 점도 마음에 들었다. 개발자를 위한 책에서 코드를 제공하는 방식은 당연히 이렇게 되어야 하지 않나 싶을 정도 이다.


- 인상적이었던 부분


요약하면 알고리즘 분석은 자료구조를 선택하는 지침을 제공하지만, 오직 다음 조건일 때만 유효합니다.


1. 응용프로그램의 실행시간이 중요하다.

2. 응용프로그램의 실행시간이 선택한 자료구조에 의존한다.

3. 증가차수에 따라 어느 자료구조가 나은지 실제로 예측할 수 있을 만큼 문제크기가 충분히 크다.


여러분은 오랜 시간 소프트웨어 엔지니어로 일하면서도 이러한 상황을 접하지 못하였을 수도 있습니다.

네 말 그대로 입니다.


- 소감


뭔가 새로운 것을 배우는 것도 아닌데 희안하게 재미있는 책이다.

두께도 두껍지 않아서 (다른 자료구조 책들과 비교해 보자!) 부담감도 적다.


- 서평 끝



+ Recent posts