페미위키:위키독/아름드리/C++ 언어

최근 편집: 2023년 1월 6일 (금) 21:34

1. 개요

C++ 언어는 비야네 스트롭스트룹(Bjarne Stroustrup)이 처음 만든 언어로, 현재 전세계 컴퓨터 언어 사용 순위 1위~3위 사이를 다투는 세계에서 가장 많이 쓰이는 컴퓨터 언어 중 하나이다. <a href="/wp-d/57b3e51b70accdcf487d5e54/View">C 언어</a>에 객체 지향 문법을 가미하여 시스템 저수준에 접근하는 것이 용이하면서도 고급 문법을 사용할 수 있어 각종 베테랑 개발자들이 많이 찾는다.

 

2. 주 사용 분야

C++ 언어의 주 사용 분야는 여러 군데가 있지만 가장 많이 쓰이는 곳은 게임이라고 할 수 있다. 그래픽 엔진의 경우 빠른 속도를 중시하면서도 사용이 편리해야 하는데 이 경우 C++ 언어가 가장 좋은 해결책이 될 수 있다. 또한 벡터나 행렬 연산에 SIMD 명령어를 사용해야 하는 경우 벡터 또는 행렬의 추상화와 더불어 SIMD Intrinsic이나 어셈블리 언어와 혼용하여 사용하여 편의성을 높이면서 성능을 끌어올릴 수 있다.

 

원래 응용프로그램에서도 C++ 언어를 많이 사용했으나 현재는 MFC 프로그램의 유지보수나 Qt를 이용한 개발 외에는 대부분 C# 언어나 Java 언어, 심지어는 Python 언어 같은 고생산성 언어들로 갈아탔기 때문에 현재 대부분의 C++ 언어 수요는 게임에서 나오고 있다고 볼 수 있다.

 

3. 문제점

성능이 빠르면서 고급 문법을 사용할 수 있다는 장점이 있지만 단점 역시 존재한다.

 

  1. C 언어에 비해 느린 성능
  2. 메모리 관리의 어려움
  3. 전처리기에 따른 복잡한 코드
  4. 비정상적인 메모리 접근으로 인한 오류

 

먼저 virtual, throw, try-catch 등 다양한 C++ 기능들의 이유로 C 언어에 비해 느린 성능을 뽑아내게 된다. 그래봤자 일반적인 인터프리터 언어에 비해 매우 빠른 속도를 제공하지만 JIT 컴파일러의 등장으로 C++이 JIT 컴파일러를 사용하는 다른 언어에 비해 느려질 수 있는 경우도 존재한다. (물론, 흔히 사용하는 '전형적인 코드'의 경우이다. 대부분의 경우 일정 이상 숙련자가 짠 코드라면 C++이 더 빠르다. C++이 숙련까지 시간이 훨씬 더걸린다는게 문제이지만.)

 

메모리 관리도 어려움이 큰데, C++ 언어 초보자는 C 언어 초보자에 비해 훨씬 많은 메모리 문제를 야기한다. 일부 문법이 일반적인 절차 지향적인 구조를 가진 것이 아니라서 흐름을 제대로 읽어내지 못하기 때문이다. 이는 상급자 수준의 개발자도 가끔 겪는 문제이다. 때문에 정말 빠른 속도가 필요한 경우 C 언어나 C++ 언어로, 속도보다는 편의성이 필요한 경우 편의성이 높은 언어로 개발하여 두 프로그램을 동시에 이용하는 기법도 많이 사용되고 있다. 이는 Unity 엔진이 사용하는 방식이다.

 

C 언어와 더불어 C++ 언어, Objective-C 언어가 가지는 문제점은 바로 전처리기를 추가하면 추가할 수록 복잡해지는 코드이다. 주로 크로스플랫폼 코드를 작성할 때 이런 문제가 발생하게 되는데, 이 때문에 아예 클래스를 몽땅 추상화해서 상속을 사용하는 경우도 발생한다. 어떤 방법을 사용하든 복잡해지는 것은 마찬가지이기 때문에 아예 모든 플랫폼이 가지고 있는 API만 사용해서 작성하려는 시도도 있다.

 

비정상적인 메모리 접근에 따른 Access Violation 문제도 있다. 해당 프로그램이 접근할 수 없는 메모리 주소를 접근하려고 한다던가 NULL 영역에 접근하려고 한다던가 하는 코드 때문에 오류가 발생하는 경우가 종종 발생한다. 이 때문에 관리되는 언어를 사용해 개발하려는 시도가 일반 응용프로그램 개발자들 사이에서 있었고, 실제로 C#이나 Java 같은 관리되는 언어로 대체하기도 했다.

 

4. 표준

C++ 언어는 ISO에서 문법 표준(표준번호 ISO/IEC 14882)을 관리하고 있다. 현재 최신 표준 버전은 C++ 14이며, 큰 향상이 있었던 버전은 C++ 11이다. 또한 현재 C++ 17 버전이 준비 중에 있다. 버전 숫자는 표준이 재정되었거나 재정 완료 예정인 연도의 뒷 자리 두 개를 따서 정한다. 이 표준 문서는 1300페이지가 넘는 엄청난 분량을 가지고 있으며, 문법과 표준 함수들에 대한 조건들이 적혀 있다. 표준에서 라이브러리 등을 어떻게 구현할지에 대해서는 언급하지 않기 때문에, 한 컴파일러에서 최적화된 코드가 다른 컴파일러에서는 성능이 떨어지는 결과도 종종 나온다. 또한, 표준에서 언급하지 않은 경우의 수에 대해서는 전혀 상관하지 않기 때문에, 정의되지 않은 행동을 할 경우 컴파일러/컴퓨터 마다 다른 결과가 나올 수도 있다. 

 

이 문법 표준을 완전히 잘 따르는 컴파일러는 표준이 나온지 얼마 되지 않았을 때에는 존재하지 않는다. 표준이 완전히 재정되기 전에 해당 표준의 일부 문법 구성요소를 미리 구현하는 컴파일러는 많이 있다. C++ 14 문법의 경우 Visual Studio 2015의 내장 Visual C++ 컴파일러는 아직 제대로 지원하지 못하며, GCC나 clang도 완전히 지원하지 않는 경우도 있다. 또한 지원은 하는데 변형된 문법도 지원하여 일부 컴파일러에서만 동작하는 문법들도 존재한다.