프로그램은 언어가 달라도 다들 거기서 거기라곤 하지만, 나 역시도 그런 이야기를 하는 사람임에도 불구하고, 사실은 그렇지 않다는 점을 요즘들어 뼈저리게 느끼고 있다. 항상 자바만 써 오다가  요즘들어 어쩔 수 없이 C++을 사용하게 되었는데, 이게 아주 그지깽깽이다.


다양한 개발 언어

세상에는 참으로 다양한 개발 언어가 존재한다는 사실을 다들 알고는 있겠지만 실제로 그 수를 헤아려보면 기절할만큼 많고 다양하다는 사실에는 새삼 놀라게 된다. 물론 모든 언어를 다 통달해야 할 필요는 전혀 없지만서도, 다양한 종류의 언어들을 접하다보면 '내가 참 좁게 생각하고 있구나-' 하고 생각해 볼 기회가 생긴다.

나는 자바를 사용한다. 자바는 참 잘 만든 언어라 생각한다. 별도의 헤더 파일이 필요하지 않기 때문에 코딩 시간이 적고, 배포가 쉬우며, 라이브러리를 사용하는 방법이 굉장히 간단하다. 게다가 알게 모르게 없는게 없어서 어떤 문제를 접했을 때 '아- 이런 기능 정도는 누군가 했을 것 같은데-' 하는 생각이 들면 구글부터 검색해보는 것이 좋다. 거의 대부분은 누군가가 이미 만들어놨으며, 그 누군가는 보통 어떤 개인의 이름이기보다는 아파치 정도의 이름 있는 그룹 단위인 경우가 많다.

내가 특별히 자바를 사용하는 이유는, 지금 그것을 쓰고 있기 때문이기도 하지만, 완벽한 객체 지향 언어(처음 접하고 익힐 땐 완벽하다고 생각했는데, 루비를 보고 나서는 생각이 많이 바뀌었다)라는 점에 매료되었던 것 같다. C++을 쓰다보면 태생을 알 수 없는 함수들이 튀어나오는데 거부감이 어찌나 심하던지... printf 같은 함수들을 보면 어떤 클래스 안에 넣어주고 싶은 마음이 굴뚝 같다.

작년에 루비라는 언어를 잠깐 봤는데 이건 반드시 한 번 쯤은 보는 것이 좋을 듯 싶다. 루비는 '완벽한 객체 지향이란 이런거다!' 라고 약간의 억지를 쓰는 듯 해 보이긴 하지만 그건 그것 나름대로 매력적이고, 객체 간 메시징이라는 개념은 함수 호출보다 훨씬 더 유연하고 훌륭하고 아름답다. 뿐만 아니라 정적으로 코드를 작성하는 (이렇게 밖에 표현하지 못하는 건 내가 아직 잘 모르고 손을 놓은지 오래 되었기 때문이다) 것이 가능하다.


그럼에도 불구하고 C++

연구실에 들어온 로봇을 굴리기 위해서 모든 것을 직접 다 작성하는 것은 미친 짓이고, 함께 딸려온 라이브러리를 사용하는 것이 정석이다. 딸려온 라이브러리는 C++ dll(so), 그리고 그것을 JNI로 연동한 자바 jar 이었는데 수일간의 뻘 짓 결과 jar 는 사용할 수 없을 것 같다는 결론을 내렸다. 업체 마저도 '제대로 테스트 되지 않음' 이라고 명시하고 있거니와 어차피 시리얼 통신 하는 거면 직접 짜도 될 걸 개발 인력이 부족했던 건지 swig를 써서 wrapping 해 놓았는데 그게 완벽하지 못한 것 같다.

C++ 은 참으로 까탈스런 언어다. 디버그 모드니 릴리즈 모드니 하는 컴파일 모드가 있고 그렇게 컴파일 된 라이브러리는 같은 모드에서만 제대로 연결되는 것 같다. 어떤 라이브러리를 사용하려면 헤더와 lib, dll 등을 각각, 그리고 일일이 추가해야 한다. 이것은 굉장히 귀찮고 실수를 하기 쉬운 부분이다! 자바를 쓰던 나에겐 상당히 귀찮은 일이었고, 이 과정에서 왠만한 초심자도 겪기 힘들 법한 문제들을 죄다 한 번씩 겪었다. 혈압은 급속도로 상승했고 담배를 피우지 않아도 입에서 연기가 뿜어져 나올 지경이었다니까.


그런데도 C++

장단점이 있기 마련이다. OS의 완벽한 기능을 활용하기 위해서는 C++ 을 사용하는 것이 당연할 지도 모른다. 시스템 이벤트에 접근한다거나 하드웨어를 직접 제어해야 하는 경우라면 어쩔 수 없는 선택이 될 것이다. 귀찮음은 익숙해지면 해결될 문제고, 실수는 반복하다보면 줄어든다. 결국 다른 개발 환경으로 인한 낯설음이 가장 큰 문제일지도 모른다.


섞던가...

자바가 느리다고들 한다. 그런데 사실 그렇게 느리지도 않다. '루프를 만 번 돌려서 매 회 문장을 프린트하게 했더니 C++이 월등히 빨랐어요!' 따위의 말은 사실 아무 의미가 없다. 내가 풀려고 하는 문제가 무엇인지, 그 문제가 요구하는 성능이 무엇인지를 생각해야지 단순히 만번 프린트하기 따위의 속도 경쟁은 아무런 의미를 갖지 못한다. 나는 두 언어가 모두 요구 사항을 만족하는 경우라면 개발 환경이나 개발 속도, 배포 방법 등에서 자바가 월등히 우월하다고 생각한다.

언어의 특성에서 오는 제약, 즉 하드웨어를 직접 제어한다던가 시스템 이벤트에 접근해야한다면 두 언어를 섞는 것도 하나의 대안이 될 수 있다. 반드시 특정 언어 하나에 매달릴 필요가 없다는 말이다.


결론을 굳이 내리자면, 미안하지만...

어떤 언어가 좋고 나쁨을 따지는 것은 굉장히 소모적이며 쓸 데 없는 일이다. 글을 이렇게까지 적어놓고, 여기까지 읽게 해놓고 이런 소리를 하면 이게 뭔가 싶기도 하겠지만 이 말은 사실이다. 주저리 주저리 긴 글을 작성한 건 내가 요즘들어 처음 써보는 C++로 인해 너무나 많은 스트레스를 받고 있어서 푸념 삼아 끄적였을 뿐이지 뭐가 더 우월한가를 논하려 했던 것은 아니다. 논쟁을 기대했다면 살짝 미안하다.

초심자도 왠만하면 잘 안 걸릴 법한 함정을 죄다 밟아봐서 약이 제대로 올랐다. 이런 함정은 워낙 걸리기도 힘들어서 구글 마저도 답해주지 않더라. 낯선 개발 환경은 이런 것이다. 하지만 이런 함정들 덕분에 조금은 익숙해져 가는 것 같다. 성질부터 내기보다는 왜 안될까를 먼저 생각하는 걸 보면 말이다.
이 글의 트랙백 주소는 http://semix2.tistory.com/trackback/362 입니다