10년 만에 새로 태어나는 ‘모던 C++’

가 +
가 -

C++언어가 다시 주목받고 있다. 10여년간 별다른 업데이트 없던 C++가 2011년부터 대대적인 공사에 들어갔기 때문이다. 현재 2014년과 2017년 개발 로드맵이 나온 상태이고, 이를 통칭해 ‘모던 C++’라고 따로 부르고 있다.

C++ 표준화 작업은 1998년에 시작됐다. C++ 표준화 단체에서는 꾸준히 C++에 대한 부족한 부분을 제안하며 보안점을 토의했는데 2011년에 본격적으로 기능을 넣었다. 10년 만에 업데이트를 해서 그런지 최근 트렌드에 맞는 기능들이 대폭 들어갔다. C++ 개발자들도 관심을 보이고 있으며, 관련 세미나도 꾸준히 열리고 있다.

Modern_cpp_04

 ▲6월14일 열린 MS 테크데이즈  C++ 세미나. 약 200명의 개발자가 참여했다. 

C++는 2000년대 초·중반에 특히 사랑받은 언어다. 국내외를 막론하고 게임 분야에서 활발히 사용됐다. 모바일게임 개발 붐이 일어나면서 그 인기가 조금 주춤한 상태다. 김희준 카카오 엔지니어는  “C++는객체 지향 성격을 가지면서, 동시에 하드웨어를 제어하기 좋은  C언어의 장점 모두를 가지고 있다”라며 “지금은 유니티와 같은 다양한 플랫폼이 나왔지만, 당시만 해도 C++를 대체할 만한 언어가 없을 만큼 높은 성능을 냈다”라고 설명했다.

Modern_cpp_05

▲C++로 만드는 프로젝트 종류(출처: MS 테크데이즈 세미나)

C++ 표준화 단체는 언어 뒤에 연도를 붙이는 식으로 새 버전 이름을 정하고 있다. 2011년에 나온 C++는 ‘C++11’, 2014년에 업데이트된 언어는 ‘C++14’이다. 새롭게 변한 C++언어는 람다식, 알밸류(rvalue) 레퍼런스, 비동기 프로그래밍 등을 지원한다. 이러한 기능은 직접 구현하기 어려운 탓에, 언어 차원에서 지원되면 성능 향상에 큰 도움을 준다. 람다식이나 비동기 방식은 최근 자바나 C# 같은 다른 언어에서도 잇달아 지원된 바 있다.

람다식은 알고리즘을 명확하게 하고 표현을 간결하게 하도록 도와준다. 코드량을 줄여주는 데 큰 도움을 주는 셈이다. 예를 들어, 정렬 기능을 이용하고자 할 때 문자 같은 경우 선후 관계를 따로 정의해야 한다. 람다식은 이러한 정렬 기준를 함수로 만들어, 바로 포인터로 보내준다. 김명신 한국MS 수석 기술부장은 “코드 표현이 간결하기로 소문난 파이썬과 비교해도 손색없을 만큼 C++도 짧고 명료하게 사용할 수 있다”라고 설명했다.

Modern_cpp_01

 ▲평균값을 계산하는 코드. 왼쪽이 파이썬으로 만든 코드, 오른쪽은 C++14로 만든 코드(출처: MS 테크데이즈 세미나)

또 다른 기능인 알밸류 레퍼런스는 애플리케이션 구조에 큰 영향을 준다. 과거 C++는 타입 값을 전달할  때 복사본을 만들고 지우는 과정을 반복했다. 이 과정은 시간과 메모리에 영향을 많이 주는데, 알벨류 레퍼런스가 지원되면서 복사하지 않고도 곧바로 옮길 수 있다. 성능이나 속도를 크게 향상시킬 수 있게 된 것이다.

비동기 프로그래밍도 인기 있다. 비동기 프로그래밍은 개발자들 사이에서 최근 가장 많은 관심을 불러일으키는 기능 중 하나다. 개발하기 어렵고 성능에 영향을 많이 주기 때문이다. 동기 호출이란 특정 기능을 요청하면 결과물이 나올 때까지 기다리는 방식이다. 비동기 호출은 결과 값이 나오기 전에 다른 작업을 할 수 있게 도와준다. 그래서 여러 작업을 동시에 할 수 있는 효과를 준다.

그동안 개발자들은 C++를 복잡하고 배우기 힘든 언어라고 생각해 왔다. C++ 표준화 기구도 이에 대해 고민을 많이 한 모습이다. 이런 인식을 바꾸기 위해 라이브러리를 적극적으로 늘리기로 했다. 개발자가 갖다 붙여 사용할 수 있는 예제를 늘리자는 얘기다. 김희준 개발자는 “자바나 C# 같은 경우 라이브러리가 풍부하기 때문에 웹서버 구축이나 채팅 기능을 코드 몇 줄로 바로 넣을 수 있다”라며 “C++개발자는 이를 많은 코드로 구현해야 했지만, 라이브러리가 추가되면서 더 개발이 쉬워질 것”이라고 설명했다.

C++ 표준화 기구는 현재 라이브러리만 지원하는 팀을 따로 두고 있다. MS와 같은 외부 업체들도 C++ API나 라이브러리를 늘려가는 추세다.

Modern_cpp_08

 ▲네트워크 기능을 지원하는 C++ 오픈소스 ‘카사블랑카

김명신 MS 수석 기술부장은 “전세계 C++ 프로젝트 통계를 보면, 절반 이상이 4년 이하의 신생 프로젝트”라며 “C++개발자 중 대다수가 20·30대 주류 개발자인 만큼 최근에도 관심을 받고 있다”라고 설명했다.

Modern_cpp_09

 ▲전세계 C++개발자 나이대 분포. (출처: MS 테크데이즈 세미나)

네티즌의견(총 4개)