오르카의 아틀리에

자료구조를 배우게된 이유?

학교에서 자료구조를 1학년 2학기에 수강했으니 1년 반쯤 되었다. 그때 당시 다른 학생들처럼 1학년은 대부분 교양필수과목을 수강했기 때문에 학교에서 배운 전공 지식은 NXT와 간단한 C++ 지식이 전부였다. (물론 따로 Web front 공부를 했지만) 아는게 별로 없던 1학년 때 소프트웨어 마에스트로 5기에 지원해서 떨어진 이유가 전공 지식과 경험이 부족했기 때문이라고 생각이 들었다. 내년에는 꼭 붙어보겠다는 생각으로 컴퓨터 공학과 다운 과목을 한번 배우고 싶어졌다. 1학년 때는 거의 학교에서 시간표를 정해주다시피 하지만 다행하게도 1학년 1학기를 빡세게 보내서 4학점을 넘겨 남들보다 3학점 정도 추가로 수강할 수 있었기 때문에 2학년 과목인 자료구조를 들을 수 있었다.


자료구조를 배우는 이유?

결국 “양대헌” 교수님의 자료구조를 듣게 되었는데 과제가 매주 나왔다. 초반에는 쉬워서 간단하게 만들었지만 뒤로가서 그래프나 AVL-Tree가 나오면서 조금 힘들었었다. 하지만 처음으로 시간 복잡도라는 것을 배워 자료 구조들의 성능을 계산해보고, 클래스를 설계해서 작성해볼 수 있었다. 그때 까지만 해도 “작동하기만 하면 되지!”라는 식의 프로그래밍을 하고 있어서 소스코드에서 본드칠의 냄새가 물씬 풍겼지만, 자료구지시간 덕분에 지금은 조금은 뇌를 가지고 프로그래밍을 할 수 있게 된 것이다. 사실 자료구조를 직접 구현하여 사용할 필요는 없다. STL 사용법만 알고 가져다 쓰면 거의 무난하게 프로그래밍을 할 수 있다. (사실 내가 어떻게 구현하더라도 STL보다 느릴 거다 ㅠㅜ) 그런데도 자료구조를 배우고 직접 만들어 보는 이유는 데이터를 저장하는 방법에 대해 고민을 할 수 있고 그 고민을직접 구현함으로써 프로그래밍 적으로 생각할 수 있는 능력을 기를 수 있기 때문이라고 생각한다. 이 자료구조가 왜 필요한지, 자료구조의 원리와 동작을 이해하고 구현해보면 실력이 한 움큼 성장해있을 것이다.


앞으로의 포스팅?



자료구조 시간에 과제로 C++로 구현해야 했던 자료구조들을 코드를 가지고 작동원리와 왜 이렇게 구현하였는지에 대하여 이야기하는 방향으로 포스팅을 작성할 생각이다. 그때 과제가 10개 정도 있었으니 포스팅은 10~12개 정도가 될 것 같다. 소스코드는 부끄럽지만 github의 gist를 통해 공개할 예정이다. (1학년 때 만들었던 코드라 소스가 엉망일지도모르겠다) 앞으로의 포스팅들의 소스코드를 천천히 분석하면서 따라오는 것도 좋은 방법이 될것이다. ps. 과제를 위해서 그냥 소스를 긁어가도 상관없다! 요즘은 과제 유사도 검사 시스템이있기 때문에 좋은 점수를 받을 것이라고 장담할 수 없다. 걸리지 않으려면 코드를 일부 수정해야하고, 그럴거면 차라리 시간이 조금 걸리더라도 소스코드를 보고 직접 자신만의 스타일로 구현해보는 것이 좋다.