독고솜의 인생일지

C++ CODE "Fun하고 Cool하고 Sexy한 코딩 Style 본문

카테고리 없음

C++ CODE "Fun하고 Cool하고 Sexy한 코딩 Style

독고솜 2022. 10. 8. 20:36

왜 코딩 스타일에 많은 시간을 투자해야할까? 아니, 그 가치는 있을까?

인턴에게 지저분한 웹 애플리케이션 넘겨줬을때 퇴사하는 이유, 그리고 기본 로직을 과연 1년이 지나도 기억할 수 있을까?

 

  1. 문서화
  2. 분활
  3. 명명 규칙
  4. 언어 사용
  5. 포매팅

https://tasddc.tistory.com/34?category=1003492

https://tasddc.tistory.com/34?category=1003492 

 

코드 문서화

 

소스 파일에 작성된 주석을 의미.

코들르 작성항 당시 가졌던 생각을 다른 이에게 전할 수 있는 좋은 기회.

 

주석의 중요성은 상당히 높음.

1. 클라이언트에 코드를 사용하는 방법을 알려주기 위해서. 헤더 파일에 정의된 public 함수나 메서드 만큼은 반드시 주석을 달도록.

 

/*리턴값 : int

저장된 값을 int로 반환해줌.

발생 가능한 익셉션 :

어찌고 하면 발생.

 

 

2.코드의 알고리즘 설명 주석.

알고맂므 위에 다 넣고

중간중간 씩 넣기.

 

3. 메타정보

//TODO: 앞으로 할일.

및 공지같은거.

int a; // 버그 #123를 해결하도록 추가한 문장 - Kim

 

4. 주석 스타일

 

if(input & 2 == 0 ) // 결과가 짝수면...

 

5. 임의 주석

 

소스 파일에 작성된 주석을 의미.

코들르 작성항 당시 가졌던 생각을 다른 이에게 전할 수 있는 좋은 기회.

 

정해진 형식과 관계없이 필요할 때마다 주석을 달 때가 있다. 아래와 같은 가이드라인을 따라야 한다.

  • 공격적이거나 무시하는 표현은 삼간다. 다른 사람이 언제든지 볼 수 있기 때문.
  • 팀원끼리만 이해하는 농담을 적어도 문제 되진 않지만, 관리자의 검토를 받는 것이 좋다.
  • 주석을 작성하기 전에 굳이 주석을 달 필요가 없도록 코드를 수정할 수 없는지 검토.
  • 누군가 여러분이 작성한 코드를 읽고 있다고 생각하고 쉽게 이해할 수 없는 부분마다 주석을 남긴다.
  • API를 사용하는 과정이 명확하지 않다면 사용한 API에 대한 참고 문헌을 남긴다.
  • 코드를 업데이트하면 주석도 반드시 업데이트해준다.
  • 한 함수를 여러 부분으로 나누기 위해 주석을 작성할 때, 그 함수를 더 작은 단위의 함수로 나눌 수 없는지 검토한다.

분활

코드 분활이란 코드를 더 작은단위로 나눠서 작성한느 방식.

 

 

  • 리팩터링이란? 코드의 구조를 재조정하는 작업이라고 한다. 리팩터링의 기법은 간단하게 다음과 같다.
    • 추상화 수준을 높이는 기법
      • 필드 캡슐화 : 필드를 private로 설정, getter & setter로 접근
      • 타입 일반화 : 코드를 좀 더 공유할 수 있도록 일반적인 타입 사용
    • 코드를 좀 더 논리적으로 분할하는 기법
      • 메서드 추출 : 거대한 메서드를 좀 더 이해하기 쉽도록 일부를 발췌하여 새로운 메서드로 정의
      • 클래스 추출 : 기존 클래스에 있는 코드 중 일부를 새 클래스로 옮긴다.
    • 명칭과 위치를 개선하는 기법
      • 메서드 및 필드 이동 : 좀 더 적합한 클래스나 소스 파일로 이동한다.
      • 메서드 및 필드 이름 변경 : 목적이 잘 드러나도록 이름을 바꾼다.
      • 올리기 : OOP에서 기본 클래스로 옮기는 기법
      • 내리기 : OOP에서 상속 클래스로 옮기는 기법
  • 리펙토링은 코드 분할을 수행할 좋은 기회이다.
  • 리펙토링 하는 과정에서 버그가 발생하는 부분을 찾을 수 있도록 테스팅 프레임워크(단위 테스트 등)를 사용하는 것이 좋다.

 

 

 

 

 


3.4 명명 규칙


C++ 컴파일러의 명명 규칙

이름의 첫 글자로 숫자 X (int i = 1to2);

더블 언더스코어는 특정한 용도로 사용되기 떄문에 금지. (my____name)

언더스코어로 시작하는 이름도 안됨.(_name, _thjwu)

 

상수는 k

전역은 g

클래스 멤버는 m

부울은 b

카운터는 m_num

 

int i > int row 이렇게 바꿔라.

#include <iostream>
#include <string>
#include <charconv>
#include <string_view>



using namespace std;

int main(void) {

	for (int row = 1; i < 10; i++) {
		for (int column = 1; j < 10; j++) {

		}
	}

}

 

_ 와 대문자 A 구별

함수나 메서드 이름을 대문자,

 


스타일

 

포인터 대신 레퍼런스 사용하기

 


익셉션

그거.

 


포매팅

코드 서식에 대한 논쟁으로 싸우는 일이 다반사.

if문에서 공백을 넣는 위치에 대한 논쟁.

 

특히 if{

}

 

if

{

}

에 대한 논쟁은 많고 어떤 스타일이 좋은지에 대한 의견은 없다.