한 문장으로 보는 C++
C++는 소스 코드를 곧장 네이티브 기계어로 바꾸는 정적 타입의 컴파일 프로그래밍 언어입니다. 인터프리터도 없고 프로그램과 CPU 사이에 가상 머신도 두지 않는다는 이 하나의 설계 선택이, C++를 작성할 수 있는 언어 중 가장 빠른 축에 들게 하는 이유이자, 결코 느려서는 안 되는 소프트웨어를 떠받치는 이유입니다.
다들 거치는 첫 프로그램입니다. 바로 여기서 실행해 보세요.
스크립트 언어보다 구조가 더 많은데, 이는 의도된 것입니다. C++는 명시적으로 작성하는 대가로 정밀한 제어권을 줍니다. 앞으로 몇 페이지에 걸쳐 이 모든 조각을 하나씩 풀어 보겠습니다.
C++가 빠른 이유
대부분의 스크립트 언어는 실행 시점에 명령을 읽고 실행하는 인터프리터나 가상 머신을 거쳐 코드를 돌립니다. C++는 그 모든 것을 건너뜁니다.
- 컴파일러(
g++나clang++같은)가.cpp소스를 읽어 특정 프로세서와 운영체제를 위한 기계 명령으로 번역합니다. - 그 결과는 CPU가 직접 실행하는 독립 실행 파일입니다. 코드와 하드웨어 사이에 아무것도 끼어들지 않습니다.
프로그램이 도는 동안 어떤 번역도 일어나지 않기 때문에, C++ 프로그램은 즉시 시작하고 프로세서의 전속력으로 동작합니다. 또한 더 고수준 언어들이 일부러 감추는 메모리와 하드웨어에 대한 세밀한 제어권도 얻습니다.
대가는 이렇습니다. 그 기계어는 단 하나의 플랫폼을 위해 빌드됩니다. Windows에서 컴파일한 실행 파일은 Mac에서 동작하지 않으며, 대상마다 소스를 다시 컴파일해야 합니다. (어떤 JVM에서도 도는 이식 가능한 바이트코드로 컴파일하는 Java와 대비됩니다.)
정적 타입과 멀티패러다임
두 가지 성질이 C++ 코드의 생김새와 느낌을 결정합니다.
정적 타입이란 모든 변수가 컴파일 시점에 알려진 타입을 가지며, 프로그램이 실행되기도 전에 컴파일러가 타입을 검사한다는 뜻입니다.
count는 평생 int입니다. 거기에 "hello"를 넣으려 하면 컴파일되지 않습니다. 처음에 더 많이 타이핑해야 하는 대가로, 한 부류의 실수 전체를 일찍 잡아냅니다.
멀티패러다임이란 C++가 하나의 스타일을 강요하지 않는다는 뜻입니다. 단순한 절차적 코드를 작성할 수도 있고, 로직을 클래스로 정리(객체 지향)할 수도 있으며, 범용적이고 재사용 가능한 코드를 위해 템플릿을 쓸 수도 있습니다. 실제 프로그램의 대부분은 이 셋을 섞어 씁니다. 이 유연함은 강력하지만, 동시에 C++가 배워야 할 범위가 넓다는 뜻이기도 합니다. 한 번에 한 개념씩 다뤄 나가겠습니다.
C++의 용도
C++는 성능과 제어가 타협 불가능한 곳이면 어디에나 등장합니다.
- 게임 엔진 - Unreal Engine, Unity의 코어, 그리고 대부분의 AAA 게임 코드.
- 시스템 소프트웨어 - 운영체제, 디바이스 드라이버, Chrome과 Firefox 같은 브라우저.
- 고성능 서비스 - 마이크로초가 중요한 데이터베이스, 트레이딩 시스템, 검색 인프라.
- 임베디드와 하드웨어 - 자동차, 드론, 의료 기기, IoT용 펌웨어.
어떤 소프트웨어가 빨라야 하거나, 빠듯한 메모리에 들어가야 하거나, 하드웨어와 직접 대화해야 한다면, 그것이 C++로 작성되었을 가능성이 높습니다.
C++는 C가 아니다 (하지만 거기서 출발했다)
C++는 1980년대에 C에서 "클래스를 갖춘 C"로 자라났고, 지금도 대부분 상위 집합으로 남아 있습니다. 유효한 C 코드 상당수가 C++로 컴파일됩니다. 하지만 그 이후로 언어는 엄청나게 커졌습니다.
C++는 객체 지향 프로그래밍, 범용 코드를 위한 템플릿, 참조, 예외, 그리고 이미 만들어진 도구로 가득한 풍부한 표준 라이브러리를 추가합니다. 다음 코드는 그중 하나인 vector를 사용합니다. 자기 메모리를 스스로 관리하는 크기 변경 가능한 배열로, C에서는 직접 손으로 만들어야 하는 것입니다.
모던 C++(C++11, C++17, C++20 표준)는 언어를 C 시절보다 더 안전하고 표현력 있게 만들기 위해 이런 도구들에 크게 기댑니다. 초보자가 흔히 저지르는 실수는, 표준 라이브러리가 이미 문제를 풀어 주는데도 C 스타일의 C++(수동 메모리 관리, 곳곳에 날것의 배열)를 작성하는 것입니다. 이 문서 전반에서 우리는 모던 스타일을 선호하겠습니다.
다음: C++ 설치하기
자신의 컴퓨터에서 C++를 작성하고 실행하려면 컴파일러가 필요합니다. 보통 g++(GCC의 일부), clang++, 또는 Windows에서는 MSVC 툴체인입니다. 다음 페이지에서는 그중 하나를 설치하고 터미널에서 제대로 동작하는지 확인하는 과정을 안내합니다.
자주 묻는 질문
C++는 무엇에 사용되나요?
C++는 속도와 제어가 중요한 소프트웨어를 떠받칩니다. 게임 엔진(Unreal, Unity의 코어), 운영체제, 브라우저(Chrome, Firefox), 데이터베이스, 트레이딩 시스템, 임베디드 장치 등이 그 예입니다. C++의 강점은 클래스, 템플릿, 표준 라이브러리 같은 고수준 기능을 제공하면서도 하드웨어에 가깝게 동작한다는 점입니다.
C++는 컴파일 언어인가요, 인터프리터 언어인가요?
C++는 컴파일 언어입니다. g++나 clang++ 같은 컴파일러가 소스 코드를 특정 CPU와 운영체제를 위한 네이티브 기계어로 곧장 번역하여 독립 실행 파일을 만듭니다. 프로그램과 프로세서 사이에 인터프리터나 가상 머신이 끼어들지 않으며, 그래서 C++가 그토록 빠른 것입니다.
C와 C++의 차이는 무엇인가요?
C++는 "클래스를 갖춘 C"로 시작했고 대부분 C의 상위 집합이어서, 대부분의 C 코드는 C++로도 컴파일됩니다. 큰 추가 요소는 객체 지향 프로그래밍(클래스와 상속), 템플릿, 표준 라이브러리(vector, map 같은 컨테이너), 참조, 예외, 그리고 C에는 없는 수많은 안전성·편의 기능입니다.