Page 168

하지만 C++의 기능 중 최적화할 수 없는 부분이 여전히 남아 있다고 반박하는 사람도 있다. 예 를 들어 10장에서 설명한 virtual 메서드를 구현하려면 vtable이 있어야 할 뿐만 아니라 실행 시간에 호출 단계가 늘어나기 때문에 non-virtual 함수를 호출할 때보다 실행 속도가 떨어질 수 있다. 하지만 좀 더 깊이 생각해보면 이 주장은 설득력이 떨어진다. virtual 메서드는 단순 함 수 호출 이상의 기능을 제공한다. 예를 들어 실행 시간에 호출할 함수를 선택하는 기능도 제공 한다. 이 기능을 non-virtual이면서 비교 가능한 comparable 함수로 구현하면 실제로 호출할 함 수를 선택하는 조건문을 추가해야 한다. 선택 기능이 필요 없다면 non-virtual 방식으로 구현 하면 된다. C++는 ‘필요 없는 기능은 굳이 사용할 필요가 없다’는 기본 디자인 원칙을 따른다.

virtual 메서드를 사용하지 않으면 이를 사용할 때 발생하는 오버헤드를 피할 수 있다. 따라서 C++에서 non-virtual 함수를 사용하는 부분의 성능은 C에서 함수 호출을 구현한 코드와 같 다. 하지만 virtual 함수를 사용함으로써 발생하는 오버헤드가 그리 크지 않기 때문에 final 클 래스가 아니라면 모든 메서드(소멸자는 포함, 생성자는 제외)를 virtual로 구현하는 것이 좋다. 이보다 더 중요한 점이 있다. C++에서 제공하는 하이레벨 구문을 활용하면 디자인 측면에서 훨 씬 효율적이고, 가독성이 높고, 유지보수하기 좋고, 불필요한 부분이 없는 코드를 만들 수 있다.

C와 같은 절차형 언어를 사용할 때보다 C++ 언어를 사용하면 개발 과정, 성능, 유지보수 측면 에서 훨씬 유리하다.

C#이나 자바와 같은 다른 하이레벨 객체지향 언어도 있다. 둘 다 가상 머신에서 구동한다. 반면 C++로 작성한 코드는 CPU에서 곧바로 구동된다. 코드를 실행하는 데 가상 머신 같은 중간 단 계를 거치지 않는다. 그래서 C++ 프로그램은 거의 하드웨어 수준으로 실행된다. 다시 말해 C# 이나 자바보다 훨씬 실행 속도가 빠를 때가 많다.

25.2 언어 차원의 효율성 언어 차원의 최적화를 과도하게 강조하는 책이나 블로그를 많이 볼 수 있다. 이런 기법도 분명 도움 되고 실제로 특정한 경우에 프로그램의 성능을 크게 향상시킬 수 있다. 하지만 프로그램 의 디자인과 알고리즘이 성능에 미치는 영향이 훨씬 크다. 아무리 레퍼런스로 전달하더라도 쓸 데없이 디스크를 접근하는 횟수가 많다면 효과가 없다. 레퍼런스나 포인터에 집착하다가 큰 그 림을 놓치기 쉽다.

1216 5부 C++ 소프트웨어 공학

Profile for 한빛미디어

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

전문가를 위한 C++ (개정4판) - 맛보기  

『전문가를 위한 C++』(개정4판)은 새로 추가된 기능과 관련 도구를 비롯해 C++에 대한 모든 내용을 코드와 솔루션 위주로 소개한다. 저자는 실전 프로그래밍에 적용할 수 있는 현실적인 기법을 다양하게 소개하였으며, 본 교재는 C++를 더 깊이 이해하...

Advertisement