naming rule(convention) - cchamchi/cansat GitHub Wiki

였λ₯Έμͺ½ λΈ”λ‘œκ·Έμ— μ •λ¦¬λœ 것을 참고둜 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. μ°Έκ³  λΈ”λ‘œκ·Έ

일관성을 μœ„ν•œ κ°€μž₯ μ€‘μš”ν•œ κ·œμΉ™μ€ 이름 κ·œμΉ™μ„ μ •ν•˜λŠ” 것이닀. 이름 μŠ€νƒ€μΌμ„ 톡해 μš”μ†Œμ˜ 선언을 μ°Ύμ§€ μ•Šκ³ λ„ ν•΄λ‹Ή μš”μ†Œκ°€ νƒ€μž…μΈμ§€, λ³€μˆ˜μΈμ§€, ν•¨μˆ˜μΈμ§€, μƒμˆ˜μΈμ§€, ν˜Ήμ€ λ§€ν¬λ‘œμΈμ§€ λ°”λ‘œ μ•Œ 수 μžˆλ‹€. 우리 머리 μ†μ˜ νŒ¨ν„΄-λ§€μΉ­ 엔진은 μ΄λŸ¬ν•œ 이름 κ·œμΉ™μ— μƒλ‹Ήνžˆ μ˜μ‘΄ν•œλ‹€.

이름 κ·œμΉ™μ€ μƒλ‹Ήνžˆ λͺ¨ν˜Έν•˜μ§€λ§Œ 이 μ˜μ—­μ—μ„œ 개인의 μ„ ν˜Έλ„λ³΄λ‹€ 일관성 이 더 μ€‘μš”ν•˜λ‹€. 합리적이라고 μƒκ°ν•˜λ“  μ•„λ‹ˆλ“  κ·œμΉ™μ€ μ§€μΌœμ•Ό ν•œλ‹€.

일반적인 이름 κ·œμΉ™

이름듀(ν•¨μˆ˜, λ³€μˆ˜, 파일 λ“±)은 μ•½μ–΄λ₯Ό ν”Όν•˜κ³  μ„œμˆ μ μœΌλ‘œ μ§€μ–΄μ•Ό ν•œλ‹€.

κ°€λŠ₯ν•œ 이름은 μ„œμˆ μ μœΌλ‘œ μ‚¬μš©ν•˜λΌ. μƒˆλ‘œ μ½λŠ” μ‚¬λžŒμ΄ μ¦‰μ‹œ 이해할 수 μžˆλŠ” 것이 κΈ€μž 길이λ₯Ό μ€„μ΄λŠ” 것보닀 훨씬 μ€‘μš”ν•˜λ‹€. ν”„λ‘œμ νŠΈμ— κ΄€κ³„μ—†λŠ” μ‚¬λžŒμ—κ²Œ μ΅μˆ™ν•˜μ§€ μ•Šκ±°λ‚˜ λͺ¨ν˜Έν•œ μ•½μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ 말고, 쀑간 κΈ€μžλ₯Ό μ§€μ›Œμ„œ μ•½μ–΄λ‘œ λ§Œλ“€μ§€ 마라.

int price_count_reader;    // μΆ•μ•½μ—†μŒ.
int num_errors;            // "num"은 λˆ„κ΅¬λ‚˜ 이해가λŠ₯.
int num_dns_connections;   // "DNS"도 λˆ„κ΅¬λ‚˜ 이해가λŠ₯.
int n;                     // μ˜λ―Έμ—†μŒ.
int nerr;                  // λͺ¨ν˜Έν•œ μΆ•μ•½.
int n_comp_conns;          // λͺ¨ν˜Έν•œ μΆ•μ•½.
int wgc_connections;       // νŒ€ λ‚΄λΆ€μ‚¬λžŒλ“€λ§Œ μ•„λŠ” μ•½μ–΄.
int pc_reader;             // "pc"λŠ” λ‹€μ–‘ν•œ μ˜λ―Έκ°€ μžˆλ‹€.
int cstmr_id;              // 쀑간 단어λ₯Ό μ§€μ› μŒ.

파일 이름

파일 이름은 λͺ¨λ‘ μ†Œλ¬Έμžμ΄μ–΄μ•Ό ν•˜κ³  μ–Έλ”μŠ€μ½”μ–΄(_) ν˜Ήμ€ λŒ€μ‰¬ (-)λ₯Ό 포함할 수 μžˆλ‹€. λ°˜λ“œμ‹œ μ–Έλ”μŠ€μ½”μ–΄λ₯Ό μ‚¬μš©ν•  ν•„μš”λŠ” μ—†κ³  ν”„λ‘œμ νŠΈμ— μ‚¬μš©ν•˜λŠ” κ΄€λ‘€λ₯Ό λ”°λ₯Έλ‹€.

μ‚¬μš© κ°€λŠ₯ν•œ 파일 이름 μ˜ˆμ‹œ:

my_useful_class.cc
my-useful-class.cc
myusefulclass.cc
myusefulclass_test.cc // \_unittest와 \_regtestλŠ” deprecateλ˜μ—ˆλ‹€.

C++ νŒŒμΌμ€ .cc으둜 λλ‚˜κ³  헀더 νŒŒμΌμ€ .h둜 λλ‚œλ‹€.

db.h와 같이 /usr/include에 이미 μ‘΄μž¬ν•˜λŠ” 파일 이름은 μ‚¬μš©ν•˜μ§€ 말자.

일반적으둜 μƒμ„Έν•˜κ²Œ 파일 이름을 지어라. 예λ₯Ό λ“€λ©΄, http_server_logs.hκ°€ logs.h보닀 μ’‹λ‹€. FooBar 클래슀λ₯Ό μ •μ˜ν•  λ•Œ 일반적으둜 ν•œ 쌍의 νŒŒμΌμ„ κ°–λŠ”λ‹€. 예λ₯Ό λ“€μ–΄, foo_bar.h, foo_bar.cc 처럼 말이닀.

인라인 ν•¨μˆ˜λŠ” .h에 μžˆμ–΄μ•Ό ν•œλ‹€. 인라인 ν•¨μˆ˜μ˜ μ½”λ“œκ°€ 짧으면 .h μ•ˆμ— λ“€μ–΄κ°€κ³ , κΈΈλ‹€λ©΄ -inl.h둜 κ°€μ•Ό ν•œλ‹€. 클래슀 μ•ˆμ— λ§Žμ€ 인라인 μ½”λ“œκ°€ μžˆλ‹€λ©΄ 3개의 파일둜 λΆ„λ¦¬ν•œλ‹€.

url_table.h      // 클래슀 μ„ μ–Έ
url_table.cc     // 클래슀 μ •μ˜
url_table-inl.h  // λ§Žμ€ μ½”λ“œλ₯Ό ν¬ν•¨ν•œ 인라인 ν•¨μˆ˜

νƒ€μž… 이름

νƒ€μž… 이름은 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜κ³  μ–Έλ”μŠ€μ½”μ–΄ 없이 λ‹¨μ–΄λ§ˆλ‹€ 첫 κΈ€μžλ‘œ λŒ€λ¬Έμžλ₯Ό μ‚¬μš©ν•œλ‹€. 예λ₯Ό λ“€λ©΄, MyExcitingClass, MyExcitingEnum.

클래슀, ꡬ쑰체, typedef, μ—΄κ±°ν˜• 같은 νƒ€μž…μ˜ μ΄λ¦„μ—λŠ” 같은 κ·œμΉ™μ΄ μ μš©λœλ‹€. λ‹€μŒ μ˜ˆμ‹œμ²˜λŸΌ νƒ€μž… 이름은 λ‹¨μ–΄λ§ˆλ‹€ λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λ©° μ–Έλ”μŠ€μ½”μ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

// classes, structs
class UrlTable { ...
class UrlTableTester { ...
struct UrlTableProperties { ...

// typedefs
typedef hash_map<UrlTableProperties \*, string> PropertiesMap;

// aliases
using PropertiesMap = hash_map<UrlTableProperties \*, string>;

// enums
enum UrlTableErrors { ...

λ³€μˆ˜ 이름

λ³€μˆ˜ 이름은 λͺ¨λ‘ μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜λ©° 단어 사이에 μ–Έλ”μŠ€μ½”μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€. 클래슀 멀버 λ³€μˆ˜λŠ” μ΄λ¦„μ˜ 끝에 μ–Έλ”μŠ€μ½”μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€. 예λ₯Ό λ“€λ©΄, a_local_variable, a_struct_data_member, a_class_data_member_ 처럼 말이닀.

곡톡 사항

μ˜ˆμ‹œ:

string table_name;  // μ’‹μŒ - μ–Έλ”μŠ€μ½”μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€.
string tablename;   // μ’‹μŒ - λͺ¨λ‘ μ†Œλ¬Έμžμ΄λ‹€.
string tableName;   // λ‚˜μ¨ - λŒ€λ¬Έμž μ‚¬μš©

클래슀 데이터 멀버

데이터 멀버(μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ λ˜λŠ” 멀버 λ³€μˆ˜)의 이름은 보톡 λ³€μˆ˜μ²˜λŸΌ μ†Œλ¬Έμžμ™€ 선택적인 μ–Έλ”μŠ€μ½”μ–΄λ‘œ μž‘μ„±ν•˜μ§€λ§Œ, 항상 끝에 μ–Έλ”μŠ€μ½”μ–΄λ₯Ό 뢙인닀.

string table_name_;  // μ’‹μŒ - 끝에 μ–Έλ”μŠ€μ½”μ–΄κ°€ μžˆλ‹€.
string tablename_;   // μ’‹μŒ

ꡬ쑰체 λ³€μˆ˜

ꡬ쑰체에 μ•ˆμ— μžˆλŠ” 데이터 λ©€λ²„λŠ” ν΄λž˜μŠ€μ— μžˆλŠ” 데이터 멀버와 λ‹€λ₯΄κ²Œ 끝에 μ–Έλ”μŠ€μ½”μ–΄λ₯Ό 뢙이지 μ•Šκ³  보톡 λ³€μˆ˜μ²˜λŸΌ 이름 μ§“λŠ”λ‹€.

struct UrlTableProperties {
  string name;
  int num_entries;
}

μ–΄λ–€ κ²½μš°μ— ν΄λž˜μŠ€μ™€ ꡬ쑰체λ₯Ό 써야 ν•  지에 λŒ€ν•΄μ„œλŠ” ꡬ쑰체 λŒ€ 클래슀λ₯Ό μ°Έκ³ ν•˜λΌ.

μ „μ—­ λ³€μˆ˜

μ œν•œμ μœΌλ‘œ μ‚¬μš©λ˜μ–΄μ•Ό ν•˜λŠ” μ „μ—­ λ³€μˆ˜μ˜ 이름에 λŒ€ν•œ νŠΉλ³„ν•œ κ·œμΉ™μ€ μ—†λ‹€. ν•˜μ§€λ§Œ μ „μ—­ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•Œμ—λŠ” g_와 같이 둜컬 λ³€μˆ˜μ™€ μ‰½κ²Œ ꡬ뢄할 수 μžˆλŠ” 접두어λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

μƒμˆ˜ 이름

k둜 μ‹œμž‘ν•˜λŠ” λŒ€μ†Œλ¬Έμžκ°€ μ„žμΈ 이름을 μ‚¬μš©ν•œλ‹€. const int kDaysInAWeek = 7;

μ§€μ—­λ³€μˆ˜μΈμ§€, μ „μ—­λ³€μˆ˜μΈμ§€, 클래슀의 일뢀인지와 상관 없이 λͺ¨λ“  컴파일 μ‹œμ  μƒμˆ˜λ“€μ€ λ‹€λ₯Έ λ³€μˆ˜λ“€κ³Ό 쑰금 λ‹€λ₯Έ 이름 κ·œμΉ™μ„ μ‚¬μš©ν•œλ‹€. k둜 μ‹œμž‘ν•˜μ—¬ λ§€ λ‹¨μ–΄μ˜ 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ μ“΄λ‹€.

ν•¨μˆ˜ 이름

일반적인 ν•¨μˆ˜λ“€μ€ λŒ€μ†Œλ¬Έμžκ°€ μ„žμ—¬ μžˆλ‹€. 보톡, ν•¨μˆ˜λ“€μ€ λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜κ³  각 μƒˆλ‘œμš΄ λ‹¨μ–΄λŠ” 'upper camelcase'λ‚˜ 'Pascal case'둜 ν‘œν˜„ν•œλ‹€. μ΄λŸ¬ν•œ 이름듀은 μ†Œλ¬Έμžλ‘œ μž‘μ„±ν•˜λ©΄ μ•ˆλœλ‹€. 예λ₯Ό λ“€μ–΄, 'StartRPC()'κ°€ μ•„λ‹Œ 'StartRpc()'처럼 λ‹¨μ–΄λ§ˆλ‹€ λ‘λ¬Έμžμ–΄λ₯Ό λŒ€λ¬Έμžλ‘œ μ“°κΈ°λ₯Ό μ„ ν˜Έν•΄λΌ.

AddTableEntry()
DeleteUrl()
OpenFileOrDie()

μ ‘κ·Όμžμ™€ λ³€κ²½μžλŠ” ν•΄λ‹Ήν•˜λŠ” λ³€μˆ˜μ˜ 이름과 같은 것을 μ“΄λ‹€. MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable().

일반 ν•¨μˆ˜

class MyClass {
public:
    ...
    bool is_empty() const { return num_entries_ == 0; }

private:
    int num_entries_;
};

ν•¨μˆ˜ 이름은 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜μ—¬ 각 λ‹¨μ–΄μ˜ 첫 κΈ€μžλ₯Ό λŒ€λ¬Έμžλ‘œ μ“°κ³ , μ–Έλ”μŠ€μ½”μ–΄λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

ν•¨μˆ˜μ˜ μ‹€ν–‰ 쀑 ν¬λž˜μ‹œκ°€ λ°œμƒν•  수 μžˆλ‹€λ©΄ ν•¨μˆ˜μ˜ 이름 뒀에 OrDie λ₯Ό 뢙인닀. 이 κ·œμΉ™μ€ ν”„λ‘œλ•μ…˜ μ½”λ“œμ—μ„œλ„ μ—λŸ¬κ°€ λ°œμƒν•  κ°€λŠ₯성이 μ–΄λŠ 정도 μžˆλŠ” ν•¨μˆ˜μ— ν•œν•΄ μ μš©ν•œλ‹€.

AddTableEntry()
DeleteUrl()
OpenFileOrDie()