[소프트웨어공학] Code Convention

양현지·2023년 5월 18일
3

소프트웨어공학

목록 보기
3/11

0. Code Convention이란?

  • 프로그래밍(코드) 스타일

    • 코드 스타일을 왜 정해야 하는가?
      : 프로젝트를 수행하며, 나의 코드를 다른 사람이 읽기 좋아야하며 (가독성), 나 또한 다른 사람의 코드를 수월하게 읽고 사용하기 위해
      ※ 혼자 개발하더라도 일관된 코딩 스타일을 유지하는 것이 유지 보수에 용이함
    • 무엇을 포함?
      file, class, operation, attribute의 명칭, 주석 형식 등을 포함

※ Goal of Code convention

  • Optimize for the reader, not the writer
  • Be consistent with existing code
  • Be consistent with the broader C++ community when appropriate
  • Avoid surprising or dangerous constructs
  • Avoid constructs that our average C++ programmer would find tricky or hard to maintain
  • Be mindful of our scale
  • Concede to optimization when necessary

1. 파일명

  • 파일명은 알파벳, 숫자, 언더바(_)만 사용한다. (언더바로 시작하는 것은 X)
    • e.g. Main.cpp , state_machine_2.c , StateMachine.cpp, StateMachine.h
  • 같은 파일명은 한번만 사용
  • cpp 파일명은 대표 클래스명을 사용한다. (Cohesion을 고려)
  • cpp 파일명에는 언더바(_)를 사용 X

2. Operation / Attribute

1) Operation

  • 함수와 메서드의 이름은 소문자로 시작하고, 여러 단어일 경우에는 camel case를 사용
    (예: myfunction => myFunction)
  • 함수와 메서드의 이름은 가능한한 명확하고 간결하게 작성할 것
  • 특정한 작업을 수행하는 함수에는 동사로 시작하는 함수명 사용 (예: calculateTotal())
  • 생성자 (Constructors):생성자의 이름은 클래스의 이름과 동일 (예: MyClass())
  • 소멸자 (Destructors):소멸자의 이름은 클래스의 이름 앞에 '~' 추가 (예: ~MyClass())
  • 멤버 변수에 접근하거나 설정하는 경우, get과 set 접두어 추가 (예: getName(), setName())
  • 부울 타입 함수 (Boolean Functions): 부울 값을 반환하는 함수의 이름은 'is' 또는 'has'로 시작 (예: isEnabled(), hasValue())

2) Attribute

  • 소문자로 시작하고, 여러 단어일 경우에는 underscore('_')로 단어 구분 (예: my_variable)
  • 클래스의 프라이빗 멤버 변수의 경우 이름 앞에 'm_'을 추가 (예: m_privateVariable)
  • 상수 멤버 변수의 이름은 'k'로 시작하며, 여러 단어일 경우에는 underscore('_')로 단어 구분 (예: const int kMaxValue)

3. 주석 형식

: comment는 코드 작성의 필수 요소

제일 중요한 건 코드 가 그 자체로 글처럼 읽혀야함
=> ' give sensible names to types and variable' 하는 것이 comment로 설명하는 것보다 훨씬 좋은 코드

  • // or /* */ 를 사용 (일반적으로 전자가 더 많이 쓰임)

1) Function comment

  • 함수 바로 위에 작성
  • 주석은 함수가 수행하는 작업을 설명해야 하며, 함수의 인자, 반환 값, 예외 처리를 포함
  • 주석 앞에는 '/*'를 사용하고, 주석의 각 줄은 ''로 시작합니다.
/**
 * Calculates the total sum of two numbers. <- "함수가 수행하는 작업"
 *
 * @param num1 The first number. <- "매개변수1"
 * @param num2 The second number. <- "매개변수2"
 * @return The sum of num1 and num2.<- "반환값"
 * @throws InvalidNumberException If either num1 or num2 is invalid. <- "예외 처리"
 */ 
int calculateSum(int num1, int num2) {
    // Function body
}

2) Class comment

  • 클래스 선언 바로 위에 작성
  • 주석은 클래스의 역할과 목적을 설명해야 하며, 클래스의 사용법, 제약 사항, 관련된 정보를 포함
  • 주석 앞에는 '/*'를 사용하고, 주석의 각 줄은 ''로 시작합니다.
/**
 * Represents a car object. <- "클래스의 역할"
 * 
 * This class provides methods for starting the car, stopping the car,
 * and changing its speed. <- "클래스의 목적" (과제에서는 생략해도 무방할 듯)
 */
class Car {
};

4. Class 형식

  • 멤버 변수의 정의는 멤버 함수의 정의보다 먼저 할 것
  • Class comment를 class 선언 바로 위에 작성

1) 멤버 변수

  • private 또는 protected로 선언
  • 멤버 변수명은 소문자로 시작하고, 여러 단어일 경우에는 underscore('_')로 구분
  • (웬만하면) private으로 선언되고, 필요한 경우에만 protected로 선언
  • 멤버 변수에는 직접 접근하지 않고 접근자(getter)와 설정자(setter)를 사용

2) 멤버 함수

  • 멤버 함수는 public 선언
  • 멤버 함수명은 함수의 역할을 잘 나타내도록 작성 (2(1) 참고)
  • 멤버 함수의 정의는 소스 파일(.cpp)에 작성

중요한 것은 이 모든걸 철저히 지키는게 아닌 자신이 속한 프로젝트, 조직의 "스타일을 배우고 맞춰가야함"

※ 참고
https://google.github.io/styleguide/cppguide.html
https://del4u.tistory.com/92

0개의 댓글