기본 개념(Basic Concepts)

기본 개념(Basic Concepts)

C++ 프로그램을 본격적으로 배우기 전에, 앞으로 계속 등장할 용어와 개념들을 먼저 짚고 가면 훨씬 수월해져요. 이 문서는 C++을 설명할 때 쓰는 특정 용어들과 개념들의 정의를 모아둔 섹션이에요.

C++ 프로그램은 선언(declaration)을 담은 텍스트 파일들(보통 헤더 파일과 소스 파일)의 연속이에요. 이 파일들은 번역(translation) 과정을 거쳐 실행 가능한 프로그램이 되고, C++ 구현이 그 프로그램의 main 함수를 호출하면서 실행이 시작돼요.

프로그램 안의 어떤 단어들은 특별한 의미를 갖는데, 이걸 **키워드(keyword)**라고 해요. 다른 단어들은 식별자(identifier)로 쓰이고요. 주석(comment)은 번역 과정에서 무시돼요. 프로그램에는 리터럴(literal)도 있는데, 그 안 문자의 값은 문자 집합(character set)과 인코딩에 따라 결정되고, 특정 문자는 이스케이프 시퀀스(escape sequence)로 표현해야 해요.

출처: cppreference

본문

C++ 프로그램의 실체(entities)들

C++ 프로그램의 **실체(entities)**는 값(values), 객체(objects), 참조(references), 구조화 바인딩(structured bindings, C++17부터), 결과 바인딩(result bindings, C++26부터), 함수(functions), 열거자(enumerators), 타입(types), 클래스 멤버(class members), 템플릿(templates), 템플릿 특수화(template specializations), 팩(packs, C++11부터), 이름공간(namespaces)이에요. 전처리기 매크로(preprocessor macro)는 C++ 실체가 아니라는 점, 기억해 두면 좋아요.

선언과 정의

선언(declaration)은 실체를 도입하고, 이름과 연결하고, 그 속성을 정의할 수 있어요. 실체를 사용하는 데 필요한 모든 속성을 정의하는 선언이 바로 **정의(definition)**예요. 프로그램은 odr-사용되는(odr-used) 비인라인 함수나 변수에 대해 오직 하나의 정의만을 가져야 해요.

함수의 정의는 보통 문(statement)들의 나열을 포함하고, 그중 일부는 프로그램이 수행할 계산을 지정하는 표현식(expression)을 포함해요.

이름, 이름 검색, 스코프

프로그램에서 만나는 이름은 이를 도입한 선언과 **이름 검색(name lookup)**을 통해 연결돼요. 각 이름은 프로그램의 일부 영역에서만 유효한데, 그 영역을 **스코프(scope)**라고 해요. 어떤 이름은 **링키지(linkage)**를 가져서, 서로 다른 스코프나 번역 단위(translation unit)에 나타나도 같은 실체를 가리키기도 해요.

타입과 변수

C++의 모든 객체, 참조, 함수, 표현식은 어떤 **타입(type)**과 연결돼요. 타입은 기본(fundamental) 타입일 수도, 복합(compound) 타입이나 사용자 정의 타입일 수도 있고, 완전(complete)하거나 불완전(incomplete)할 수도 있어요.

선언된 객체와 참조 중 비정적 데이터 멤버가 아닌 것들을 **변수(variables)**라고 불러요.

더 알아보기

  • C++ 언어의 기초가 되는 각 용어(키워드, 식별자, 리터럴, 타입 등)에 대한 더 자세한 내용은 각각의 문서에서 다뤄요.
  • 프로그램의 번역 과정과 전처리에 대해 더 알아보고 싶다면 cppreference의 C++ 언어 문서들을 이어서 보면 돼요.