본문 바로가기
📊 Algorithm/Algorithm plus+

🧼 클린코드 🫧

by 정람지 2023. 8. 1.

알튜비튜의 클린코드 자료!

알튜비튜에서 코드 리뷰를 위해 공부해봅시다

아래 내용 출처 알튜비튜!


C++ 코드 작성 컨벤션

  • 변수 : 스네이크 표기법
  • 함수 : 카멜 표기법
  • 상수 : 대문자와 언더스코어
int hello_world; //변수
int helloWorld() //함수
const int HELLO_WORLD //상수

클린 코드 작성

  • 전역변수 사용은 최대한 지양!
    • 전역변수를 많이 사용하게 되면 코드가 길어질 경우, 실수를 많이 유발하게 돼요. 전역변수로 썼다는 내용을 까먹고 지역변수로 중복해서 선언할 수도 있구요! 특히 협업에서 아주 치명적이죠. 따라서 전역변수는 정말 필요한 경우를 제외하곤 지양하고 있습니다!!
    • 전역변수가 필요한 경우는? 3개 이상의 함수에서 동일하게 사용하는 변수이거나, 재귀함수에서 사용하는 변수일 경우 메모리를 효율적으로 사용하기 위해 전역변수를 자주 사용하곤 합니다!
    • 따라서 전역변수 사용 대신, 지역 변수를 사용 후, 다른 함수에서 쓰일 일이 있다면 매개변수로 넘겨주도록 안내해주세요
  • 함수로 뺄 수 있는건 최대한 빼기
    • 가능한 메인을 짧게
    • 함수의 용도는 딱 하나!! 명확하게
    • 재사용성이 높도록 함수화하기
  • 인덴테이션 너무 깊게 들어가는 것 지양
    • 인덴테이션은 최대한 3-depth 까지만 허용
    • continue, return 등의 사용을 권장
    // 가독성 안좋은 코드
    if (조건1) {
    	수행1
    	if (조건2) {
    		수행2
    		if (조건3) {
    			수행3
    			if (조건4) {
    				수행4
    			}
    		}
    	}
    }
    
    // 가독성 좋은 코드
    if (!조건1) {
    	continue;
    }
    수행1
    if (!조건2) {
    	continue;
    }
    수행2
    if (!조건3) {
    	continue;
    }
    수행3
    if (!조건4) {
    	continue;
    }
    수행4
    
  • 변수 이름을 명확하게!
    • ex. sum → O, hap → X
  • 삼항 연산자 지양
    • 삼항 연산자는 너무 많이 쓸 경우 가독성이 안좋아져요!
    • 삼항 연산자를 한 번 정도만 쓰는 건 괜찮지만, 중첩해서 사용할 경우 사용을 지양해주세요!
  • 주석 많이 권장
    • 주석은 특히 협업을 하게 될시, 혹은 자신이 예전의 내 코드를 보더라도 아주 중요한 도구예요!
  • 함수 사용 시, if-return 구조 권장
    • 함수를 써서 또 좋은 점은, 값을 바로 return할 수 있다는 것인데요! 이렇게 되면 해당 함수 내에서 return 이후의 코드는 실행되지 않을 테니 어떻게 보면 else문과 같은 역할을 할 수 있어요. 따라서 if-return 사용 시, else문 사용은 지양해주세요
    // 가독성 안좋은 코드
    bool cmp (const int &a, const int &b) {
    	if (a.first != b.first) {
    		return a.first < b.first;
    	} else {
    		return a.second < b.second;
    	}
    }
    
    // 가독성 좋은 코드
    bool cmp (const int &a, const int &b) {
    	if (a.first != b.first) {
    		return a.first < b.first;
    	} 
    	return a.second < b.second;
    }
    
  • 입출력은 메인에서만!!
    • 입력과 출력을 함수에서 관리하게 될 경우, 함수의 용도가 굉장히 불명확해져요. 특히 함수화를 하는 이유는 특정 코드를 계속 반복해서 쓸 수 있도록 (재사용성을 높임) 하기 위함인데, 입력과 출력을 같이 해버리면 해당 함수를 다른 곳에서 또 쓰기도 애매해지죠! 따라서 입력과 출력은 메인에서만 하도록 권장드리고 있습니다!! ✨✨
    • 디버깅을 위해 쓰는 출력은 예외입니다! 하지만 말 그대로 디버깅 용도이니 실제 제출할 땐 주석 처리 혹은 지운 후에 제출해야겠죠!
  • 상수 선언 권장
    • 상수는 const 상수로 선언해서 쓰도록 안내해주세요. 특히 dp 문제에서 모듈러 상수가 많이 나오는데 이러한 수들은 상수로 선언하지 않으면 실수하기 쉬워서 꼭 상수로 선언한 후 사용하도록 해주세요! + 상수로 선언해야 가독성도 높아지고, 유지보수도 쉬워집니다!
      // 상수로 선언하지 않음
      ...(중략)
      dp[i] %= 1000007;
      ...(중략)
      cout << dp[n] % 100007; // 숫자를 서로 다르게 쓰는 실수 가능성 높음 
      
      // 상수로 선언
      const int MOD = 1000007; // 여기서만 실제 수를 관리하니까 실수할 일 적어짐
      ...(중략)
      dp[i] %= MOD;
      ...(중략)
      cout << dp[n] % MOD;
      
    • ex. dp문제에서 1000007의 나머지를 출력해야 하는 경우
  • 자주 사용하는 타입은 typedef 를 통해 별칭을 정하도록 권장
    • 자주 사용하는 코드는 typedef 로 간단하게 선언하고 사용하는 걸 권장해주세요. ex) pair<int, int> / long long / …
    • typedef 사용법: typedef <자료형> <별칭>;
  • 중괄호 사용 권장
    • 나중에 코드를 수정할 일이 생겼을 때 (코드가 한 줄에서 더 길어진다거나) 중괄호가 없으면 불편할 일이 생길 수 있어요
      • 특히, 협업을 한다고 생각하면 git에 나중에 추가한 중괄호로 인해 충돌이 날수도 있어요
       

공부