C++ 최적화 - 최고 성능을 구현하는 10가지 검증된 기법
커트 건서로스 지음, 옥찬호 옮김 / 한빛미디어 / 2019년 7월
평점 :
장바구니담기


최근에는 주로 C#과 JAVA 프로그램 언어를 쓰고 있으나, 게임 개발 또는 성능 개선이 필요한 곳에는 C++을 쓰곤 한다. 과거 어셈블리나 C를 썼던 것과 같이 요즘은 C++이 대신하는 언어가 되어 버렸다. 유니티가 C#을 지원하고 있으나, 게임 관련 각종 엔진은 C++로 제작된 경우가 많다는 것도 다들 잘 알고 있는 사실일 것이다. 실제 주변을 봐도 

내가 아는 개발자 친구도 빠른 처리가 필요한 증권사 프로그램에 필요한 각종 라이브러리는 C++로 제작하고 있다.


그만큼 C++은 어떤 프레임워크에 기초가 되는 하부 구성으로 효율성과 속도가 무척 중요한 부분에 많이 사용되는데, 최적화는 이런 프로그램 개발에 있어 모든 곳에서 다뤄져야 할 아주 중요한 사항이다.


그런데, 최적화는 단순히 몇 가지 기술만 안다고 되는 문제가 아니다. 최적화는 프로그램 전반에서 이뤄져야 하는 만큼, 다양한 측면을 바라보고, 코딩 라인마다 습관처럼 적용해야 한다. 그러다 보니 최적화 기술을 익히는 것은 쉽지가 않다. 또한 최적화는 코드 테스트와 같이 많은 시행착오를 거친 경험적 측면을 필요로 하는데, 업무 속도나 개발 일정만 따지는 환경에서 최적화 노하우를 축적한다는 것은 거의 불가능하다. 게다가 최적화를 다룬 책 또한 많지가 않다는 점에서 여러 가지로 난관이 많은 것이 프로그래밍의 최적화인 것이다.


그래도 다행인 것은 'C++ 최적화'와 같은 책이 있다는 것이다. 많지 않은 최적화 책 중에서 좀 더 다양한 것들을 익힐 수 있는 좋은 책으로 최적화의 의미부터 시작해서, 하드웨어에서의 최적화, 성능 측정, 문자열, 알고리즘, 동적 할당 변수, 문장 최적화, 라이브러리, 검색 및 정렬, 자료구조, 입출력, 동시성, 메모리 관리와 같이 개발 전반에 필요한 파트별 최적화 내용을 다루고 있다.

이 책은 C++11을 기준으로 설명하고 있으나, 지금의 C++17 릴리즈에도 적용되는 내용들이다. 


책 초반을 보면, 최적화에 대한 여러 고민을 얘기하고 있다. 최적화 무의미론도 살펴보고 있다. 책에 나온 거와같이 노력 대비 최적화로 얻을 수 있는 이득이 그리 크지 않다는 주장도 많은데, 항상 일정이 부족한 개발 현장에서는 일리가 있는 소리다. 어차피 개발 현장에서는 애자일 방법론이고, 패턴이고, 뭐고, 일정이 최고의 과제이기 때문이다. 그러나 일정에 맞춰 돌기만 하면 된다는 현장에서도 일이 어느 정도 마무리가 되면, 개발자 입장에서는 미치고 환장하게도 효율 개선과 속도 향상을 요구하곤 한다. 어쨌든 이런 요구에 현명하게 대응하기 위해서라도 최소 최적화에 대해 기본적인 지식은 알고 있어야 한다 생각한다.




프로그래밍을 하다 보면, 어떤 기능을 구현하는데, 방법이 여러 가지가 있는 경우를 많이 접하게 된다.  어떤 것을 사용하는 것이 옳은 방법인지 한참 고민에 빠지기도 한다. 책에는 그러한 경우에 대한 명확한 답을 제시한다. 필자가 실제 테스트해보고, 어떤 것이 효율적인지, 어떤 것이 더 빠르게 연산하는지, 확실한 답을 해주는 것이다.

예를 들어, std::thread와 std::async 경우도 그러하다. 프로그램에서 둘 다 동일한 기능을 구현할 수 있다. 그런데 저자는 std::async를 쓰라고 한다. 스레드는 직간접 비용이 많이 든다는 것이다. 메모리 양의 증가와 지연 또는 스래싱 등의 문제를 유발할 수 있다고 한다. std::vector와 std::array도 비슷하다. 꼭 필요하지 않는 한, 동일하게 구현이 가능하다면, std::array를 사용하라고 한다.




이렇게 'C++ 최적화'에서는 써야 할 것과 쓰지 말아야 할 것, 확인이 필요한 것 또는 염두에 둬야 할 사항들을 잘 정리해서 알려 주고 있다. 그렇기에 이 책은 개발자가 많은 시행착오를 겪어 가며, 동일한 문제로 쓸데없이 시간 낭비를 하지 않게 해준다. 바쁜 개발 일정 속에서도 최적화된 코드를 작성할 수 있게 돕는 것이다. 그리고 최소 여러 이유로 당장은 최적화된 코드를 작성하지 못하더라도, 나중에 어디를 고쳐야 할지 방향을 알 수 있게 해준다.



'C++ 최적화'가 여러모로 개발자의 스킬과 시각을 넓히는데 도움을 주는데, 다만 책 주제 자체가 프로그래밍의 깊은 곳을 건드리고 있는 만큼, 결코 쉬운 수준의 책이 아니라는 점이 아쉽다. 2장만 해도 컴퓨터 하드웨어 메커니즘에 대한 이해가 어느 정도 되어 있어야 이해가 빠르며, 이와 함께 C++ 문법을 전체적으로 잘 파악하고 있거나, 실제 여러 코딩 경험이 있는 개발자에게 어울리는 수준의 책이다. 그러나 이해하고 못하고는 개인마다 다른 것이고, 책 설명이 아주 난해한 정도는 아니므로, 자신이 이해 가능한 부분부터 보는 것도 나쁘지 않을 것이다.


책을 보는 내내, 부분별로 내가 짰던 코드를 떠올려 봤다. 어디를 개선해야 할지, 다시 생각했다. 이렇게 하다 보면, 최적화된 코딩 습관도 저절로 몸에 붙을 것이다. 레벨업을 위해 앞으로도 계속 'C++ 최적화'를 참고할 생각이다.

자신의 프로그래밍 능력을 한 단계 업그레이드하고 싶은 분이라면, 'C++ 최적화'가 큰 도움이 되어 줄 것이라 생각한다.


댓글(0) 먼댓글(0) 좋아요(1)
좋아요
북마크하기찜하기 thankstoThanksTo