식별자 명명 모범 사례

Justin·2026년 2월 13일

LearnCPP.com

목록 보기
1/22

변수와 함수 식별자 명명 모범 사례

  • C++에서는 변수 이름을 소문자로 시작하는 것이 관례입니다.
  • 변수 이름이 한 단어이거나 글자 수를 줄여 간략하게 만든 말인 경우, 전체를 소문자로 작성해야 합니다.
int value; // 관례적 (conventional)
int Value; // 비관례적 (소문자로 시작해야 함)
int VALUE; // 비관례적 (소문자로 시작하고 전체가 소문자여야 함)
int VaLuE; // 비관례적 (정신과 상담을 받아보세요) ;)
  • 변수나 함수 이름이 여러 단어로 구성된 경우, 두 가지 일반적인 관례가 있습니다.
  • 단어를 밑줄로 구분하는 방식(snake_case)
  • 단어의 첫 글자를 대문자로 표기하는 방식(camelCase)

Snake_case

int my_variable_name;   // 관례적 (밑줄로 구분/snake_case)
int my_function_name(); // 관례적 (밑줄로 구분/snake_case)

camelCase

int myVariableName;     // 관례적 (대문자 표기/camelCase)
int myFunctionName();   // 관례적 (대문자 표기/camelCase)

매크로 식별자 명명 모범 사례

  • 매크로 식별자(identifier)는 일반 식별자와 같은 규칙을 따릅니다.
  • 관례적으로 매크로 이름은 대문자 + 밑줄 형태를 많이 씁니다.
#define EXAM_WORD "Apple"

헤더 가드 식별자 명명 모범 사례

  • 관례적으로 헤더 파일의 전체 이름을 대문자로 쓰고, 띄어쓰기나 구두점은 밑줄(_)로 바꾼 형태를 사용합니다.
  • 예를 들어 square.h라면 SQUARE_H라고 쓰는 식이죠.

bool 식별자 명명 모범 사례

  • bool 함수들은 보통 is 또는 has 라는 단어로 시작하는 이름을 가집니다.
isEqual
hasCommonDivisor

네임스페이스 식별자 명명 모범 사례

  • 네임스페이스 이름은 소문자로 쓰는 게 관례였고, 많은 스타일 가이드가 여전히 그걸 권장해요. 하지만 최근의 추세는 조금 다릅니다. 네임스페이스 이름을 대문자로 시작하는 것을 더 선호합니다.
  • 사용자가 정의한 '타입(Type)'들은 대문자로 시작하는 게 관례예요.
  • 네임스페이스도 똑같이 대문자로 시작하면 일관성이 생기죠.
  • 특히 Foo::x처럼 쓸 때 Foo가 네임스페이스인지 클래스인지 헷갈리지 않게 해줘요.
  • 시스템이나 라이브러리가 제공하는 소문자 이름들과 겹치는 걸 막아줘요.
  • C++20 표준 문서와 C++ Core 가이드라인 문서에서도 이 스타일을 사용하고 있어요.
namespace NamespaceIdentifier
{
    // 네임스페이스의 내용이 여기에 들어갑니다
}

전역 변수 식별자 명명 모범 사례

  • 관례적으로 개발자들은 전역 변수의 이름 앞에 g 또는 g_라는 접두사를 붙여서 이 변수가 전역 변수임을 나타냅니다.
  • 이 접두사는 여러 가지 중요한 역할을 해요.
    1. 전역 네임스페이스에 있는 다른 식별자들과의 이름 충돌을 방지합니다.
    1. 의도치 않은 이름 가리기(Name shadowing) 현상을 막아줍니다.
    1. 이 접두사가 붙은 변수들은 함수의 범위를 넘어서 지속되며, 따라서 우리가 변수에 가한 변경 사항들 또한 계속 유지된다는 것을 시각적으로 알려줍니다.
  • 사용자가 정의한 네임스페이스 안에 정의된 전역 변수들은 종종 이 접두사를 생략하기도 합니다.
  • 위에서 말씀드린 첫 두 가지 문제가 네임스페이스를 통해 이미 해결되었고, 변수 이름 앞에 네임스페이스 이름이 붙은 것을 보면 그것이 전역 변수임을 유추할 수 있기 때문이죠.
  • 하지만 세 번째 이유를 명확히 기억하기 위해 접두사를 계속 붙여둔다고 해서 나쁠 것은 전혀 없습니다.

정적 지역 변수 식별자 명명 모범 사례

  • 전역 변수 앞에 g_ 를 붙이는 것처럼, 정적 지속 기간을 가지는 지역 변수 앞에는 s_를 접두사로 붙이는 것이 일반적인 관례입니다.

타입 별칭 식별자 명명 모범 사례

예전부터 타입 별칭의 이름을 짓는 방식은 딱 하나로 정해져 있지 않았습니다.
주로 세 가지 방식이 쓰이는데, 코딩을 하다 보면 이 세 가지를 모두 만나게 될 것입니다.

  • 끝에 _t 를 붙이는 방식 t는 type의 약자입니다.
    size_tnullptr_t 처럼 C++ 표준 라이브러리에서 전역 타입 이름에 자주 사용합니다.
    C언어에서 넘어온 방식이라 예전에는 아주 흔했지만, 최신 C++에서는 잘 쓰지 않습니다.
    (참고로 POSIX 시스템에서는 _t를 시스템 전용으로 예약해 두었기 때문에, 이 방식을 쓰면 이름 충돌이 발생할 수 있습니다.)

  • 끝에 _type 을 붙이는 방식
    std::string::size_type 처럼 표준 라이브러리의 내부 타입들에 종종 사용됩니다. 하지만 일관성이 없어서 헷갈릴 수 있습니다.

  • 끝에 아무것도 붙이지 않는 방식

최신 C++에서는 대문자로 시작하고 끝에 아무런 꼬리말도 붙이지 않는 방식을 가장 추천합니다.
대문자로 시작하면, 소문자로 시작하는 일반 변수나 함수 이름과 쉽게 구분할 수 있어서 이름이 겹치는 것을 막아줍니다.

이 추천 방식을 따르면 주로 아래와 같은 코드를 보게 됩니다.

void printDistance(Distance distance); // Distance는 우리가 정의한 타입입니다.

이 경우 대문자 Distance는 타입이고, 소문자 distance는 매개변수의 이름입니다.
C++는 대소문자를 엄격하게 구분하므로 이렇게 써도 아무 문제가 없습니다.

모범 사례
특별한 이유가 없다면, 타입 별칭의 이름은 대문자로 시작하게 짓고 끝에 어떤 꼬리말도 붙이지 마세요.


템플릿 매개변수 식별자 명명 모범 사례

아주 단순한 상황에서 변수 이름으로 알파벳 한 글자(예: x )를 자주 사용하는 것처럼, 템플릿 매개변수가 단순하고 뻔한 용도로 사용될 때는 대문자 한 글자(보통 T부터 시작) 를 사용하는 것이 관례입니다.
예를 들어 우리가 만든 max 함수 템플릿을 보세요.

template <typename T>
T max(T x, T y) {
    return (x < y) ? y : x;
}

우리는 T에 복잡한 이름을 지어줄 필요가 없습니다.
왜냐하면 T는 단순히 비교할 값들을 위한 자리 표시자일 뿐이고,
T는 비교할 수 있는 어떤 타입이든 될 수 있다는 것이 명백하기 때문입니다.

만약 타입 템플릿 매개변수의 쓰임새가 한눈에 파악하기 어렵거나 반드시 충족해야 하는 특정 요구 사항이 있다면,
일반적으로 다음과 같은 두 가지 이름 짓기 방식을 사용합니다.

  • 대문자로 시작하는 단어
    (예: Allocator) 표준 라이브러리(Standard Library)에서 이 명명 규칙을 사용합니다.

  • 앞에 T를 붙이고 대문자로 시작하는 단어
    (예: TAllocator) 이렇게 하면 이 이름이 타입 템플릿 매개변수라는 것을 더 쉽게 알아볼 수 있습니다.

둘 중 어느 것을 선택할지는 개인의 취향에 달려 있습니다.

































profile
안녕하세요.

0개의 댓글