2012/04/06

코드 리딩

요즘에는 코드를 작성하는 시간보다 코드 읽을 일이 꽤 많은데다가 리눅스에서 주로 작업하느라 지루하면서도 한편으로는 배우는 것도 많아서 꽤나 기분이 좋다.

원래 나는 남의 코드를 잘 읽지 못하는 편이었다. 당연하게도 뭐 첫번째 이유는 실력이 부족한 것이겠지만, 내 코드에 주석도 잘 달지 않는데다가 무작정 짜기만 하니 "그때 왜 이렇게 해놓은거지?-_-?" 하는 상황이 더 많은 것 같다. 천천히 보는 버릇이 원래 없었으니 그게 될리가 있나. 진짜 남이 짜놓은 코드를 볼 때마다 무척 괴로웠다. 막 미칠거 같았다. 야 야 이거... 아오... 괜히 아무것도 아닌 인덴트 방식까지 괜히 신경질이 날 정도였는데... 어쨌든 이번에 오픈 소스 코드를 주의깊게 볼 기회가 있었는데 꽤나 유명한 오픈소스 프로그램이었으니 당연히 문서화도 어느 정도 되어 있는 편이었고 자료도 어느 정도는 있는 편이라 많이 괴로워하면서도 잘 봤던것 같다.

그래서 이번에 느낀 것이, 공부를 목적으로 하는 코드 리딩이라 하면 유명한 오픈소스 프로그램을 많이 보는 것이 가장 큰 도움이 되지 않을까 싶다. 나는 실무에서 사용하는 코드라는 것은 학부생 레벨과 비교했을 때 도대체 어느 정도의 수준 차이가 있는 것일까? 하는 궁금함이 있었는데, 실제로 실무에 쓰이는 오픈소스 솔루션도 많으니까 그런 것이 궁금하면 한번 찾아보는 것이 중요하지 않나 싶다. 나도 진작에 찾아 봤어야 하는데... 거기다 github가 진짜 거의 개짱 수준이라 괜찮은 것들 깃허브에서 찾아가지고 git clone때려서 그냥 가져다 보면 되고 이 얼마나 좋은가!

아무튼 이번에 코드를 계속 보면서 느낀 점이 있었는데 한번 적어 보면
첫째로 코드의 작성 방식은 큰 틀에서 벗어나지 않는다는 것이며, 둘째는 코드를 보기 전에 정리된 문서가 있으면 거기서 코딩 컨벤션이라거나 그 외 기타 정보들을 숙지한 다음 봐야 된다는 것, 셋째는 자신이 쓰는 IDE 툴의 기능을 알아라, 이 정도가 되겠다.

첫 번째는 디자인 패턴 얘긴데, 예전에 쓰겠다고 깔짝대던 그 디자인 패턴 그것이다. 일단 내가 본 코드에서 사용한 것은 Command 패턴이었다. 처음에 이것을 모르고 클래스를 보니 무슨 뜻인지 알 수가 없었다. 구현부를 자꾸 이상한 곳으로 빼 놔서 보기 불편하게 해놔가지고... 거의 모든 클래스가 이런 식이어서 구현부를 빼놓은 이유가 있겠군 하면서 봤는데 그게 다 이유가 있었던 것이다. 싱글톤 패턴도 그렇고, J2EE DAO라거나 뭐 기타 등등... 그러니까 보다 보면 이게 무슨 패턴인지를 알게 되고 경험치가 쌓이면서 쉽게 그 내용을 파악하게 되고 그런것이 아닐까 싶다. command는 execute(), singleton은 생성자가 private 등등...

두 번째는 코딩 컨벤션 이야기. 코딩 컨벤션을 보면 변수 명명법, 무슨 구조로 작성되었는지, 어떤 방법을 사용했는지에 대해서 먼저 정보를 얻을 수 있으니 코드 보기가 한결 쉬워진다는 것이다. 아무것도 모르고 어두운 동굴에 들어가서 출구를 찾는것보다 당연하게도 실타래와 손전등을 들고 가는게 아무래도 쉽지 않을까 싶다.

세 번째야 뭐 코드 추적이나 그런 이야기니 길게 적을 필요는 없는 것 같고, 아무튼 시간이야 꽤 걸렸지만 코드 리딩을 끝내고 나니 음... 이런 것이었구만. 하는 생각이 드는게 꽤 기분이 좋았고, 시간이 오래 걸려서 음 아직 갈길이 한참 멀었구만 하는 생각이 들어서 반성도 하게 되었다.

단시간에 실력을 늘릴 수 있는 방법은 아니지만 진짜 코드 리딩이라는 것은 하면 할수록 조금씩 실력이 늘어나게 되는... 그러나 실력은 확실하게 늘려주는, 말하자면 파워 워킹과 같은 것이 아닐까.

대류... 깃허브가 최고다.