1. 함수(매서드) 내에서 return문을 여러 번 쓰는 것보다 가능하면 변수를 사용해서 리턴값을 저장했다가 마지막에 한 번만 사용하는 것이 좋다.
int max(int a, int b)
{
int result = 0;
if(a > b)
{
result = a;
}
else
{
result = b;
}
return result;
}
2. 객체지향 코드를 작성할 시 인스턴스 변수를 사용하지 않는 함수(메서드)가 있을 경우 static을 붙이는 것을 고려한다.
static을 안 붙인 메서드(인스턴스 메서드)는 실행 시 호출되어야 할 메서드를 찾는 과정이 추가적으로 필요하기 때문에 시간이 더 걸린다.
3. 하나의 함수는 특수한 경우가 아니면 하나의 기능만 하도록 한다.
4. 주석은 필수다.
5. 단순하고 보기 쉬울수록 좋은 코드다.
6. 상수 값들은 따로 한군데에 모아서 관리하는게 편하다.
버튼에 들어가는 텍스트라던지... 아니면 나중에 일일이 화면마다 찾아서 수정해줘야 함
7. 내 생각이 맞다는 생각은 하지 말아라. 항상 틀릴수도 있다고 생각하라. 내가 틀리고 남이 맞을수도 있다.
8. 배우는걸 창피해하지 말아라. 초등학생 아니 유치원생한테도 배울게 있다면 배워라.
9. 빈번한 함수 호출은 속도 저하를 가져온다.
10. 되도록이면 실수형을 사용하지 마라. 마찬가지로 속도 저하를 가져온다.
11. 반복문 내를 최대한 간단하게 하라.
12. 재귀 호출은 사용하지 마라.
13. 불가피한 경우가 아니라면 표준 라이브러리를 사용하자.
14. 비슷한 이름(변수명)들을 함께 쓰는 일은 피할 것.
15. 이름(변수명) 짓는 방식은 일관성을 유지하자.
16. 이름(변수명)을 선택할 때는, 구현에 신경 쓰지 말고 의미에 각별히 신경 쓸 것.
17. signed <-> unsigned 변환이나 실수형을 정수형으로 변환, 더 작은 타입으로 변환하는 경우 항상 값 손실 여부를 조심할 것.
18. 배열의 경계를 넘어선 데이터 기록은 하지 않도록 각별한 주의를 기울일 것.
19. 코드 중 의미를 부여해야하는 곳에 리터럴(매직넘버)을 사용하지 말자. 그 대신에 기호형태의 상수를 정의하여 사용하는 것을 습관화 할 것.
// 이 코드 보다는
grade[0], grade[1], grade[2] 보다는
// 이 코드가 의미가 훨씬 정확하다.
#define KOR 0, #define ENG 1, #define MATH 2 // 꼭 define이 아니라도 const나 enum을 사용하든지해서 상수로 정의하여 사용
grade[KOR], grade[ENG], grade[MATH]
20. 복잡한 표현식은 금물.
21. 연산자 우선순위가 의심되면 괄호를 사용할 것.
22. 불가피한 경우가 아니라면 goto는 사용하지 말 것.
23. 변수는 항상 선언 지점에서 초기화하고 사용할 것.
24. 주석문은 그 의미를 명확하게.
25. 입력을 처리할 때는 언제든 입력이 엉망으로 들어올 수 있음을 명심할 것.
26. const 키워드를 널리 자주 꾸준히 최대한 많이 사용하자.
27. 주석을 달 때에는 코드에 대한 설명을 하지 말고 그 코드를 왜 구현했는지 "왜?"에 대한 내용을 기입할 것.
코드에 대한 설명은 시간이 좀 걸리더라도 코드를 보면 파악이 가능하지만 왜 구현했는지는 파악이 불가능하다.
왜 구현했는지 파악이 안되면 이 코드를 삭제해야 할 지 남겨둬야 할 지 판단을 할 수가 없다.
28. 짧은 코드가 아니라 명료한 코드를 작성하라.
29. 어설프게 만지면 안 되는 것은 아무도 못 만지게 하라.
private의 사용, 절차지향 언어에서도 비슷한 방식으로 사용
30. 모든 변수를 그 변수가 속할 수 있는 가장 좁은 범위 안에 두어라.
31. 안전한 데이터 구조를 사용하라.
버퍼 오버런이 발생할 수 있는 strcpy 대신 strncpy를 사용한다던지...
32. 모든 리턴 값을 체크하라.
33. 자원을 조심해서 다뤄라.
메모리 해제, 파일 닫기 등등
34. 임시 변수를 재사용하지 말아라.
35. 캐스트(cast)는 신중하게.
36. 이름(변수명)은 짧게 짓는 것보다 명료하게 짓는 것이 중요하다.
37. 매크로는 항상 대문자로 명명할 것.
38. 연관된 정보는 묶어라.
struct나 enum, namespace나 자바의 package 등등
39. 코드의 가독성을 항상 고려하라.
/*
* 코드 중간에
* 이러한 블록 코멘트는
* 훨씬 더 가독성이 좋습니다.
*/
// 같은 블록 코드이지만 마진 문자가 없는 아래의 블록 코멘트 보다는 위의 블록 코멘트가 가독성이 더 좋다.
/*
코드 중간에
이러한 블록 코멘트는
훨씬 더 가독성이 좋습니다.
*/
//또한 주석의 들여쓰기도 코드와 동일 수준으로 맞춰 주는 것이 좋다.
void strangeCommentStyle()
{
for(int n = 0; n < JUST_ENOUGH_TIMES; ++n)
{
// 이것은 다음 행에 대한 중요한 코멘트 입니다.
doSomethingMeaningful(n);
// 하지만 들여쓰기 수준이 달라 가독성을 떨어트립니다.
anotherUsefulOperation(n);
}
}
void strangeCommentStyle()
{
for(int n = 0; n < JUST_ENOUGH_TIMES; ++n)
{
// 이것은 다음 행에 대한 중요한 코멘트 입니다.
doSomethingMeaningful(n);
// 들여쓰기 수준이 같으면 가독성이 좋습니다.
anotherUsefulOperation(n);
}
}
40. 행 끝 코멘트는 코드로부터 분리하라.
class HandyExample
{
public:
...
private:
int appleCount; // 행 끝 코멘트:
bool isFatherADustman; // 코드로부터 분리해서
int favoriteNumber; // 잘 보이게 만드십시오.
};
class HandyExample
{
public:
...
private:
int appleCount; // 행 끝 코멘트:
bool isFatherADustman; // 코드로부터 분리해서
int favoriteNumber; // 잘 보이게 만드십시오.
};
41. 방파제 코멘트
이러한 코멘트는 코드와 코드 사이를 분리하여 가독성을 높여준다.
/********************************************************************************************
* foo 클래스 구현
********************************************************************************************/
42. 일반적으로 main 함수가 아닌 함수에서 종료하는 것은 아주 나쁜 프로그램 습관이다.
43. 오류가 발견되면 문제와 가장 가까운 코드에서 오류를 처리하라.
'개발' 카테고리의 다른 글
특정 경로의 명령 프롬프트 창 바로 열기 (0) | 2024.12.23 |
---|---|
Microsoft Windows에서의 system32폴더와 syswow64폴더 (0) | 2024.12.21 |
함수 주석 양식 (0) | 2024.12.21 |
C++ 창시자의 조언 (4) | 2024.12.21 |
질문하는 법 (2) | 2024.12.21 |