Skip to content
This repository has been archived by the owner on Jun 19, 2024. It is now read-only.

Code Convention

JinMu Go edited this page Oct 10, 2023 · 9 revisions

C++98 코드 컨벤션 가이드

Reference 42_c_style_guide_for_team Google C++ Style Guide

클래스

  1. 클래스 명명 규칙

    • 클래스 이름은 항상 PascalCase로 작성합니다.
  2. 클래스 파일 구조

    • 각 클래스는 다음 세 가지 파일을 가져야 합니다:
      • ClassName.h: 클래스의 구현에 필요한 다른 모든 것들을 작성합니다.
        • example. #define , #include, enum, struct
      • ClassName.hpp: 클래스의 명세(specification)만 작성합니다.
      • ClassName.cpp: 클래스의 실제 구현을 작성합니다.
  3. 파일 위치

    • 클래스를 구현하는 세가지 파일은 동일한 폴더에 위치해야 합니다.
  4. Private 변수명 규칙

    • 클래스 내의 private한 변수 이름에는 _ (underline) 접두사를 붙입니다.
  5. Protected 변수명 규칙

    • 클래스 내의 protected 변수 이름에는 _ (underline) 접미사를 붙입니다.
  6. Static 메서드 호출

    • Static 메서드를 호출할 때에는 해당 클래스의 이름을 명시합니다.
Parser::parseConf
  1. 일반 메서드 호출
    • General 메서드를 호출할 때에는 해당 클래스의 인스턴스를 chaining합니다.
parse pm; pm.parserConf
  1. OCF(Orthodox Canonical Form) 준수

    • 반드시 OCF를 준수합니다.
  2. 추상화 인터페이스

    • 추상화한 인터페이스를 먼저 정의하고 클래스를 구현합니다.
    • 예시 interface class IParser 를 먼저 정의하고 Concrete Parser를 정의.
  3. this를 명시

    • 객체 내부 변수나 메서드에 접근할 때 this를 명시합니다. (static 변수와 함수에는 적용되지 않습니다.)
  4. 메서드 오버라이딩 규칙

    • 상속 받은 메서드를 오버라이드 할때는 항상 virtual keyword를 명시합니다.
class Child: public Parent
{
	public:
		virtual parentMethod();
}

enum

  1. enum의 위치:

    • 클래스의 구현에 필요한 다른 모든 것들을 ClassName.h에 작성하라고 명시되어 있으므로, 해당 파일에 enum을 정의합니다.
  2. enum의 명명 규칙:

    • Enum의 이름은 PascalCase를 따라야 합니다. 예: ColorType, WeekDay
  3. enum 항목의 명명 규칙:

    • Enum의 항목은 상수 변수의 명명 규칙을 따라야 하므로, 모든 문자를 대문자로 작성하며 단어 사이는 _로 구분합니다. 예: COLOR_RED, DAY_MONDAY
  4. enum 값 할당:

    • Enum 항목에 특별한 값을 할당하는 것이 필요하지 않다면, 기본 값을 사용합니다. 필요한 경우에만 값을 명시적으로 할당합니다.
  5. enum과 switch문:

    • Enum을 사용하여 switch문을 작성하는 경우, 가능한 모든 enum 항목을 처리해야 합니다. 이렇게 함으로써 나중에 enum 항목이 추가되면 컴파일러가 경고를 표시하여 처리되지 않은 항목을 식별할 수 있습니다.

여기에 C++에서 enum을 사용하는 간단한 예제가 있습니다:

// ClassName.h
enum ColorType {
    COLOR_RED,
    COLOR_GREEN,
    COLOR_BLUE,
    COLOR_YELLOW
};

// ClassName.cpp (or any other implementation file)
void SomeClass::printColor(enum ColorType color) {
    switch (color) {
        case COLOR_RED:
            std::cout << "Red" << std::endl;
            break;
        case COLOR_GREEN:
            std::cout << "Green" << std::endl;
            break;
        case COLOR_BLUE:
            std::cout << "Blue" << std::endl;
            break;
        case COLOR_YELLOW:
            std::cout << "Yellow" << std::endl;
            break;
        default:
            std::cout << "Unknown Color" << std::endl;
            break;
    }
}

enum에는 typedef를 사용하지 않습니다!

코드

  1. Early Return 사용

  2. if 문에서 ! 사용 금지

    • if 문에서 !를 사용하지 않고 해당 falsy 값(falsy value)을 명시합니다. if (boolean == false)
  3. 참조형 함수 매개변수

    • int, char, uint64 등과 같은 기본 데이터 형식(primitive) 대신 모든 변수를 참조형(reference)으로 함수 매개변수로 설정합니다. ServerManager::ServerManager(int ac, char**& av)
  4. const 키워드 사용

    • 코드 또는 함수에서 변경되지 않는 값이라면 반드시 const 키워드를 사용하여 선언합니다
  5. 변수와 함수 이름 명명 규칙

    • 변수와 함수 이름은 항상 camelCase로 작성합니다.
  6. 상수 변수 이름 명명 규칙

    • 상수 변수 이름은 모두 대문자로 작성하며, 단어 사이를 _ (underline)로 구분합니다.
  7. 네임스페이스

    • 네임스페이스 이름은 모두 소문자로 작성하며, 최상위 네임스페이스와 하위 네임스페이스를 명확히 구분합니다.
  8. using 지시문

    • 전역 using namespace 문을 사용하지 않고 네임스페이스 내에서 필요한 경우만 사용합니다.
  9. return

    • return 값은 가능한 단순하게 유지합니다.
return someFunction(someAnotherFunction(someStuff)); // x

return someResult; // o
  1. 값을 비교할 대는 비교되는 변수를 좌항에 둔다.
if (42 > some) // x
	return ;

if (some < 42) // o
	return ;
Clone this wiki locally