jrcfore***
2019-10-13

C++는 마스터하기 어렵기로 악명 높지만 풍부한 기능 덕분에 게임이나 상용 소프트웨어 애플리케이션을 개발하는 대표 언어로 자리매김했다. 숙련된 C++ 프로그래머조차 잘 모르는 고급 기능도 많이 있는데, C++17이 나온 지금이야말로 C++의 모든 기능을 살펴볼 절호의 기회다.
오랜만에 필자의 주력 언어인 C++ 책을 리뷰할 기회가 생겼다. 바로 "전문가를 위한 C++" 책이 그것이다. 위 책의 개정 3판을 상당히 재미나게본 필자에게 있어서 이번 도서 리뷰 기회는 절대로 놓칠수 없없었다. 여하튼 필자의 여담은 여기까지하고, 위 책은 기존 제 3판에서 새로이 추가되었었던 C++14의 내용에 C++17에서 새로이 추가된 내용들이 정리된 책이다. 솔직히 이 책을 처음부터 끝까지 정독하기에는 큰 무리가 있다. 일단 책의 두깨를 보는순간 필자가 왜 이런 조언을 독자에게 하는지 이해가 될 것이다. 그리고 위 책은 친절한 만큼 그 내용 분량이 광대하여 C++을 처음 접하는 초심자들이 공부하기엔 썩 괜찮은 책이 아니다. 왜냐하면 하나 하나 너무 자세히 설명하고 다루고 있기 때문에 자칫하다간 금방 실증을 느끼고 C++의 참된 아름다움을 깨닫기 전에 영영 이 언어를 꺼리게 되는 현상이 발생할 수 있기 때문이다.
이 책은 앞서 필자가 언급한 것처럼, 초보자들이 보기에는 볼 내용이 너무 많다. 아니 너무 많다못해 그냥 법전 한권을 가져다가 통으로 외우세요? 라는 느낌이 책이다. 그렇기에 초심자들이 위 책을 가지고 처음 시작하기엔 좋지 않다. 다만 중급자, 고급자들이 개발을 하다 막히거나 혹은 특정 부분에 대한 이해, 3년 주기로 c++ stl이 업데이트 되는데 이 때 새로이 추가된 내용들이 무엇인지 궁금한 독자들이 위 책을 가지고 학습을 하면 곱절의 학습효과를 얻을 수 있는 책이다. 물론 위의 내용들은 c++ stl 커뮤니티에 들어가서 훨씬 디테일하게 찾아서 공부할 수 있는 내용이지만, 책에는 친절하게 잘 정리되어 기술 되어 있기 때문에 이번 C++ STL 버전에는 무엇이 새로이 추가되었는지 한눈에 파악하기 정말 좋다. 따라서 위 책을 사용하고 학습하길 필자는 권한다.
이 책은 C++에서 다루는 거의 모든 내용들을 다루고 있다. 코딩 컨벤션, 디자인 패턴, 객체지향 디자인 방법론, 메모리 사용방법, 함수 재사용, 템플릿 디자인, 컨테이너, 제너릭 타입 등등.. 이번 C++17에서 새로이 추가된 병렬처리 쓰레드와 크로스 플랫폼 개발 방법까지 (덤으로 면접에서 나올 법한 질문들에 대해서도 매우 친절히 정리되어 있으므로 취준생 여러분들이라면 이 쳅터를 필독하시길 권한다.) 말그대로 필자가 아는 선에서의 모든 것들을 다루고 있다. 그만큼 독자가 원하는 챕터를 선택하여 체계적으로 공부할 수 있는 기회가 넓은 책이라는 것이다. 또한 각 쳅터는 이론적 배경, 예제 코드, 이에 대한 설명과 하면 안되는 예와 권장하고 있는 예, 그리고 주의해야할 점 등등 논리적이며 체계적으로 정리되어 있다. 이는 공부를 함에 있어 부족함이 없는 충분한 지식을 전달하고 있음을 의미한다. 따라서 C++을 꼼꼼히 학습하고자 하는 분들에게 정말로 좋은 구성이라 할 수 있겠다.
필자는 막 개발 세계에 입문하신 분들에게 항상 다음과 같이 권한다. 주력 언어 1개 그리고 서브 언어 2개 정도를 알고 있어야 한다고, 이때 주력 언어는 어떠한 경우에도 막힘이 없고 최신 트랜드에 대해 정말 잘 알고 있는 수준이어야 하며 서브 언어의 경우 간단한 레퍼런스만 있으면 어느정도 구현이 가능한 수준이어야 한다는 점을 강조한다. 왜냐하면 대부분의 언어는 비슷한 구조를 가지고 있다. 진짜 무슨 어셈블 그런 언어가 아니면 진짜로 비슷한 속성들을 가지고 있다. (단 언어의 성질이 완전히 바뀌는 언어들 간에는 그 특징이 완전히 다르므로 그것들에 대해서는 제외하도록 하자.) 그렇기에 한가지 언어에 대해서 전문성을 갖춘다면 다른 언어들을 학습하는 것에 대해서 상당한 시간과 비용을 절약할 수 있다.
크게 전문성을 갖추기에 좋은 언어들을 추천한다면 C++, Java, Javascript, Ruby, python, go 등이 있고 그중에서 C++은 진입장벽이 좀 높은 편이다. 따라서 이 점을 잘 파악하여 주력 언어를 선정할 것을 권한다.