Code Less, Create More!

Simple but useful code snippets for 3D Graphic Developers

C++

버전관리(GIT, SVN)에 친화적인 C++ 코딩 스타일

데브엑스 2023. 4. 22. 08:44
반응형

C++로 소프트웨어를 개발할 때 일관된 코딩 스타일은 개발자들이 네이밍 컨벤션, 포맷팅 및 기타 코드 관련 사항에 대해 동일한 이해를 가지도록 도와줍니다. 이는 서로 다른 스타일로 작성된 코드를 작업할 때 발생할 수 있는 혼란과 오류를 줄여줍니다. 이를 위해서 다양한 규칙들이 존재하고 한 가지로 정의되기는 어렵지만 일반적으로 아래의 원칙들을 사용할 수 있습니다.

  • 의미 있는 변수명 사용: 변수명을 정확히 표현하는 뜻있는 이름으로 선택해서 다른 사람들이 코드를 읽을 때 이해하기 어려운 짧은 이름은 피하는 것이 좋습니다. 
  • 일관된 코딩 스타일 사용: 들여쓰기, 이름 규칙 및 서식을 포함하여 코드베이스 전체에서 일관된 스타일을 따르도록 하십시오. 이렇게 함으로써 다른 사람들이 코드를 읽고 이해하기 쉬워집니다.
  • 효과적인 주석 사용: 주석은 코드를 설명하고 코드를 읽는 다른 사람들에게 컨텍스트를 제공하는 강력한 도구입니다. 주석을 사용하여 복잡한 코드를 설명하고 특정 결정이 내려진 이유를 설명하며 특별한 고려 사항이나 가정 사항을 문서화합니다.
  • 모듈화된 코드 작성: 재사용 가능하고 이해하기 쉬운 작은 모듈로 코드를 나누면 코드를 관리하고 유지 관리하기 쉬워지면서 대형 프로젝트에서 다른 사람들과 협업하기도 쉬워집니다.
  • 매크로 사용 지양: 매크로는 강력한 도구가 될 수 있지만 코드를 이해하고 유지 관리하기 어렵게 만들 수 있습니다. 대신 const 변수 또는 inline 함수를 사용하여 동일한 결과를 얻을 수 있습니다.

VCS 와 호환성 있는 코딩 스타일

현대적인 C++ 프로젝트는 규모가 커지면서 여러 사람이 협업하는 것이 필수적입니다. 이를 위해 개발자들은 버전 관리 시스템(VCS: Vesion Control System)을 사용하여 변경 사항을 추적하고, 명확한 의사 소통과 문서화를 통해 협업을 강화합니다. 버전 관리 시스템을 사용하여 개발자들은 코드베이스의 변경 사항을 추적하고, 협력하여 변경 사항을 적용하며, 필요에 따라 이전 버전으로 되돌릴 수 있습니다. 이는 모든 개발자들이 동일한 버전의 코드를 사용하도록 보장하여 충돌과 같은 문제를 줄여줍니다.

간결한 코딩 스타일을 선호하는 개발자의 경우, 버전 관리 시스템과 함께 사용하기 좋은 C++ 코드를 작성하기 위해 고려해야 할 몇가지 사항들이 있습니다.

1. { } (중괄호)

if, for, while 등은 문은 C++을 비롯한 대부분의 프로그래밍 언어에서 사용되는 기본적인 제어 구조입니다. 그러나 여러가지 이유로 다양한 스타일이 존재합니다.

if (condition)
    statement;

if (condition) {
    statement;
}
    
if (condition) { statement; }

if 문의 경우 else 를 함께 사용할 경우도 있습니다.

// 스타일 1
if (condition) {
    statement;
} else {
    statement;
}

// 스타일 2
if (condition) {
    statement;
}
else {
    statement;
}

// 스타일 3
if (condition)
{
    statement;
}
else
{
    statement;
}

스타일 3에 보이는 코드처럼 블록의 각 줄마다 중괄호 {}로 분리하는 것은 개인적인 선호도와 코딩 스타일 문제일 수 있습니다. 그러나 버전 관리 시스템(VCS)과 관련하여 몇 가지 이점이 있습니다.

중괄호를 각 줄마다 사용하는 이점 중 하나는 특정 코드 줄의 변경 내용을 추적하기 쉬워진다는 것입니다. 하나의 코드 줄을 수정할 때 VCS 소프트웨어는 변경된 정확한 줄을 쉽게 식별할 수 있습니다. 코드 변경 사항 검토, 디버깅 또한 중괄호를 각 줄마다 사용하면 코드 블록의 Scope가 더 명확하게 드러납니다. 이는 다른 개발자들이 코드 블록 내부에서 어떤 변수 또는 함수가 사용되는지 더 쉽게 파악할 수 있습니다.

그러나 중괄호를 각 줄마다 사용하는 것은 코드의 가독성을 떨어뜨릴 수 있습니다. 특히 코드 블록이 길어지면 중괄호로 인해 코드가 더 많은 줄을 차지하게 되어 코드의 전반적인 가독성이 떨어질 수 있습니다. 따라서 개발자는 중괄호를 언제 사용할지 결정할 때 코드의 가독성을 고려해야 합니다.

VCS를 사용하는 프로젝트에서는 코드의 가독성보다 변경 사항을 추적하는 데 더 중점을 둡니다. 따라서 중괄호를 각 줄마다 사용하면 코드 변경 내용을 추적하기 쉬워지므로 VCS와의 호환성을 높일 수 있습니다. 이를 위해 개발자는 코드 변경 사항을 추적하는 데 도움이 되는 코딩 스타일 관행을 따르는 것이 좋습니다. 예를 들어 개발자는 코드 변경 내용을 작은 단위로 커밋하는 것이 유용합니다. 이를 통해 변경 내용을 더 정확하게 추적할 수 있습니다.

중괄호를 각 줄마다 사용할지 여부는 개발자의 개인적인 선호도와 프로젝트의 코딩 스타일 가이드에 따라 결정됩니다. 그러나 코드 변경 내용을 추적하는 데 VCS를 사용하는 경우 중괄호를 각 줄마다 사용하는 것이 유용할 수 있습니다.

2. If () 문의 코딩 스타일

일반적으로 프로그래밍에서 if ()문은 괄호 안의 조건이 참(true)인지 거짓(false)인지에 따라 코드 블록을 실행할 수 있도록 합니다. VCS를 사용할때 if ()문을 효과적으로 사용하려면 아래 사항에 유의하세요:

  1. 조건을 간단하게 유지: 괄호 () 안의 조건을 가능한한 간단하게 유지하세요. 복잡한 논리나 여러 조건을 피하면 협업하는 다른 개발자가 이해하거나 유지 관리하기 용이합니다.
  2. 괄호 사용: 조건문 주위에 ()를 항상 사용하세요. 이러면 코드를 더 읽기 쉽고 오류가 발생할 가능성을 줄입니다.
  3. 중괄호 사용: if ()문 다음의 코드 블록 주위에 항상 중괄호를 사용하세요. 이를 통해 코드를 더 일관적으로 읽을 수 있고 나중에 블록에 추가된 코드라도 VCS에서 병합하기 용이합니다.
  4. 중첩 if()문 피하기: 중첩된 if()문은 읽기 어렵고 이해하기 어렵습니다. 다른 개발자가 작성한 코드와 충돌을 일으키기 쉽고 또한 버그의 원인이 될 수도 있습니다.

if()문은 프로그램의 흐름을 제어하는 강력한 도구입니다. 효과적으로 사용함으로써 더 읽기 쉽고 유지 관리 가능하며 버그 없는 코드를 작성할 수 있습니다.

3. If () 문 의 nesting 방지

if 문의 nesting을 방지하기 위해서는 여러 가지 방법이 있습니다.

  1. early return 원칙: early return은 함수나 루프 안에서 조건을 만족하지 않는 경우 조기에 리턴하는 것을 말합니다. 이를 사용하면 if 문의 nesting이 깊어지지 않아 코드의 가독성을 높일 수 있습니다.
  2. switch 문을 사용: switch 문을 사용하면 if 문보다 조건문이 간결하게 작성됩니다. 또한, 여러 개의 if 문이 중첩된 경우보다 switch 문을 사용하는 것이 코드의 가독성을 높일 수 있습니다.
  3. 함수나 클래스로 코드 분리: 함수나 클래스를 사용하여 코드를 분리하면 if 문의 nesting을 줄일 수 있습니다. 또한, 코드의 가독성을 높일 수 있으며, 코드의 재사용성도 높일 수 있습니다.
  4. boolean 플래그 사용: boolean 플래그를 사용하여 여러 개의 if 문을 하나의 if 문으로 합칠 수 있습니다. 이를 사용하면 if 문의 nesting을 줄일 수 있으며, 코드의 가독성을 높일 수 있습니다.

아래는 early return 원칙을 사용해서 if 문의 nesting을 피하는 샘플 코드입니다.

bool is_valid_input(const std::string& input)
{
  if (input.empty())
  {
    return false;
  }

  if (input.size() > 10)
  {
    return false;
  }

  if (!std::isalpha(input.front()))
  {
    return false;
  }

  for (char c : input)
  {
    if (!std::isalnum(c))
    {
      return false;
    }
  }

  return true;
}

위 코드는 input이 유효한지 검사하는 함수입니다. 각각의 조건을 if 문으로 검사하여 조건을 만족하지 않으면 바로 false를 반환합니다. 이렇게 하면 if문의 nesting을 피할 수 있고, 코드를 읽기 쉽게 만들 수 있습니다. 특히 다른 개발자가 조건을 추가한 경우에도 VCS에서 충돌없이 병합될 수 있습니다.

위와 같은 방법들을 적극 활용하면 if 문의 nesting을 방지할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.

4. 참고할 만한 코딩 가이드라인

C++는 계속해서 발전하는 언어이기 때문에 자주 새로운 기능이나 키워드가 도입됩니다. 따라서 이들에 대해서도 VCS에서 사용하기 용이한 코딩 스타일에 관심을 기울일 필요가 있습니다. 특히 auto 키워드에 관련해서도 주의할 사항들이 존재하기 때문에 다른 post에서 다루어 보겠습니다.

 

참고로 다양한 프로젝트에서 기준으로 활용하는 Google의 C++ 코딩 가이드라인을 아래 링크에서 확인할 수 있습니다.

https://google.github.io/styleguide/cppguide.html

 

Google C++ Style Guide

Google C++ Style Guide Background C++ is one of the main development languages used by many of Google's open-source projects. As every C++ programmer knows, the language has many powerful features, but this power brings with it complexity, which in turn ca

google.github.io

이 가이드라인은 Google에서 자체적으로 사용하는 코딩 스타일을 문서화한 것으로, 다른 개발자들도 참고할 수 있는 좋은 자료입니다. 가독성과 유지보수성을 높이기 위한 다양한 규칙과 권장사항을 포함하고 있으며, C++ 언어의 특성을 고려하여 작성되어 있습니다. 

반응형