This repository has been archived by the owner on Jun 19, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Code Convention
JinMu Go edited this page Oct 10, 2023
·
9 revisions
-
클래스 명명 규칙
- 클래스 이름은 항상 PascalCase로 작성합니다.
-
클래스 파일 구조
- 각 클래스는 다음 세 가지 파일을 가져야 합니다:
-
ClassName.h
: 클래스의 구현에 필요한 다른 모든 것들을 작성합니다.- example.
#define
,#include
,enum
,struct
- example.
-
ClassName.hpp
: 클래스의 명세(specification)만 작성합니다. -
ClassName.cpp
: 클래스의 실제 구현을 작성합니다.
-
- 각 클래스는 다음 세 가지 파일을 가져야 합니다:
-
파일 위치
- 클래스를 구현하는 세가지 파일은 동일한 폴더에 위치해야 합니다.
-
Private 변수명 규칙
- 클래스 내의 private한 변수 이름에는
_
(underline) 접두사를 붙입니다.
- 클래스 내의 private한 변수 이름에는
-
Protected 변수명 규칙
- 클래스 내의 protected 변수 이름에는
_
(underline) 접미사를 붙입니다.
- 클래스 내의 protected 변수 이름에는
-
Static 메서드 호출
- Static 메서드를 호출할 때에는 해당 클래스의 이름을 명시합니다.
Parser::parseConf
-
일반 메서드 호출
- General 메서드를 호출할 때에는 해당 클래스의 인스턴스를 chaining합니다.
parse pm; pm.parserConf
-
OCF(Orthodox Canonical Form) 준수
- 반드시 OCF를 준수합니다.
-
추상화 인터페이스
- 추상화한 인터페이스를 먼저 정의하고 클래스를 구현합니다.
- 예시 interface class IParser 를 먼저 정의하고 Concrete Parser를 정의.
-
this를 명시
- 객체 내부 변수나 메서드에 접근할 때
this
를 명시합니다. (static 변수와 함수에는 적용되지 않습니다.)
- 객체 내부 변수나 메서드에 접근할 때
-
메서드 오버라이딩 규칙
- 상속 받은 메서드를 오버라이드 할때는 항상
virtual keyword
를 명시합니다.
- 상속 받은 메서드를 오버라이드 할때는 항상
class Child: public Parent
{
public:
virtual parentMethod();
}
-
enum의 위치:
- 클래스의 구현에 필요한 다른 모든 것들을
ClassName.h
에 작성하라고 명시되어 있으므로, 해당 파일에 enum을 정의합니다.
- 클래스의 구현에 필요한 다른 모든 것들을
-
enum의 명명 규칙:
- Enum의 이름은 PascalCase를 따라야 합니다. 예:
ColorType
,WeekDay
- Enum의 이름은 PascalCase를 따라야 합니다. 예:
-
enum 항목의 명명 규칙:
- Enum의 항목은 상수 변수의 명명 규칙을 따라야 하므로, 모든 문자를 대문자로 작성하며 단어 사이는
_
로 구분합니다. 예:COLOR_RED
,DAY_MONDAY
- Enum의 항목은 상수 변수의 명명 규칙을 따라야 하므로, 모든 문자를 대문자로 작성하며 단어 사이는
-
enum 값 할당:
- Enum 항목에 특별한 값을 할당하는 것이 필요하지 않다면, 기본 값을 사용합니다. 필요한 경우에만 값을 명시적으로 할당합니다.
-
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를 사용하지 않습니다!
-
Early Return 사용
- Early return 하는 코드를 작성합니다.
-
if 문에서
!
사용 금지- if 문에서
!
를 사용하지 않고 해당 falsy 값(falsy value)을 명시합니다.if (boolean == false)
- if 문에서
-
참조형 함수 매개변수
- int, char, uint64 등과 같은 기본 데이터 형식(primitive) 대신 모든 변수를 참조형(reference)으로 함수 매개변수로 설정합니다.
ServerManager::ServerManager(int ac, char**& av)
- int, char, uint64 등과 같은 기본 데이터 형식(primitive) 대신 모든 변수를 참조형(reference)으로 함수 매개변수로 설정합니다.
-
const 키워드 사용
- 코드 또는 함수에서 변경되지 않는 값이라면 반드시
const
키워드를 사용하여 선언합니다
- 코드 또는 함수에서 변경되지 않는 값이라면 반드시
-
변수와 함수 이름 명명 규칙
- 변수와 함수 이름은 항상 camelCase로 작성합니다.
-
상수 변수 이름 명명 규칙
- 상수 변수 이름은 모두 대문자로 작성하며, 단어 사이를
_
(underline)로 구분합니다.
- 상수 변수 이름은 모두 대문자로 작성하며, 단어 사이를
-
네임스페이스
- 네임스페이스 이름은 모두 소문자로 작성하며, 최상위 네임스페이스와 하위 네임스페이스를 명확히 구분합니다.
-
using 지시문
- 전역
using namespace
문을 사용하지 않고 네임스페이스 내에서 필요한 경우만 사용합니다.
- 전역
-
return
- return 값은 가능한 단순하게 유지합니다.
return someFunction(someAnotherFunction(someStuff)); // x
return someResult; // o
- 값을 비교할 대는 비교되는 변수를 좌항에 둔다.
if (42 > some) // x
return ;
if (some < 42) // o
return ;