예전 이야기입니다.
새로 들어온 신입분이셨죠. Java를 제일 잘 한다고 하시더라고요. 저희는 C++로 프로젝트를 진행하던 때라서 할 수 있느냐고 여쭤봤더니
잘은 모르지만 배워서 잘 할수 있다고 대답하셨습니다. 당시 저는 모든 이치는 통한다고 결국 하나의 언어를 마스터하면 다른 언어는 저절로 잘 따라온다고... 저는 믿고 있었기에 맡겨보기로 했습니다.
저는 나름 야근을 자처하며 열심히 하시는 모습에 감동 반+ 왜 질문이 없지 라는 걱정 반으로 한달을 보냈습니다. 정확히는 제 자신이 질문없이 끙끙대고 책읽고 찾아보고 공부하는 스타일이라 질문이 없는것에 대해 그닥 이상하다곤 생각하지 않았기도 했지요... 그게 문제였지만.
결국 그분이 한달뒤에 내놓은 모듈을 실제로 적용해보자 몇분 있다가 뻗어버리는겁니다. 무조건이요.
알고보니 그분 모듈의 모든 코드에서 delete는 찾아볼 수 없었고 함수 내부를 포함한 모든 곳에 5줄에 한번식 등장하는 New에 컴퓨터는 홍수때 팔당댐 방수하듯 메모리를 흘려보내고 있던 것이었습니다. 수도없이 불려지는 복사생성자는 덤이었고요.
결국 저는 커피를 한잔 사드리며 수고했다는 격려와 함께 메모리는 무엇인가, 할당은 무엇인가 라는, 저를 포함한 모두가 지금도 열심히 공부하는 주제로 강의를 해드렸습니다. 그후 제대로 된 책 한권을 추천드리고 나서 어느정도 지나자 엄청난 퍼포먼스를 보여주시는걸 보며 저는 그냥 알아서 하도록 내비두는 사람은 좋은 사수가 아니구나 하는 교훈을 얻게되었습니다.
결론:
1. JAVA는 GC가 메모리를 알아서 JAVA줘요. 그래서 메모리 신경을 덜 써도 되요. (그렇다고 관리 안해주면 안되요.)
2.C++/C는 메모리를 관리해주지 않으면 나중에 이런 C++ 소리가 나와요.
3.그러니깐 JAVA/C# 하시다가 C++/C 하게 되면 조심하세요. 잘못하면 작은 하마를 건들게 되요.
4.자유 방임주의는 항상 먹혀들진 않아요. 가끔은 인터럽트를 걸어주어야 해요.