[클린코드] 5장 형식 맞추기

clean_code

스터디 매주 화, 금

화요일 금요일까지 각각 두장씩 읽고 각자 한 장씩 발표하기

분량에 따라 유동적으로 조정

  • 화요일 : 진형 홀수 장, 시준 짝수 장

  • 금요일 : 시준 홀수 장, 진형 짝수 장

형식을 맞추는 목적

  • 코드의 형식은 중요하다!
  • 코드의 형식은 의사소통의 일환이다.
  • 코드의 스타일과 가독성 수준은 유지보수의 용이성과 확장성에 영향을 미친다.
  • 코드는 사라져도 개발자의 스타일과 규율은 사라지지 않는다.

적절한 행길이를 유지하라

  • 50000줄에 육박하는 시스템도 각 파일이 500줄을 넘어가는 파일은 없고 대다수가 200줄 미만이다.
  • 파일마다 200줄 정도로도 커다란 시스템을 구축할 수 있다.

신문기사처럼 작성하라.

  • 독자는 위에서 아래로 기사를 읽고 최상단에 기사를 몇 마디로 요약하는 표제가 나온다.
  • 이름만 보고 올바른 모듈을 살펴보고 있는지 아닌지를 판단할 정도로 신경써서 짓는다.
  • 첫 부분은 개념과 알고리즘을 설명하고 내려갈수록 의도를 세세하게 묘사한다.
  • 마지막에는 가장 저차원의 함수와 세부내역이 나온다.

개념은 빈 행으로 분리하라.

  • 일련의 행 묶음은 완결된 생각 하나를 표현한다.
  • 생각 사이에 빈 행을 넣어 분리해야 마땅하다.
  • 개행이 없다면 가독성이 현저하게 떨어진다.

세로 밀집도

  • 밀접한 코드 행은 세로로 가까이 놓여야 한다.

수직 거리

  • 서로 밀접한 개념은 세로로 가까이 둬야 한다.
  • 연관성이 깊은 두 개념이 멀리 떨어져 있으면 코드를 읽는 사람이 소스 파일과 클래스를 여기저기 뒤지게 된다.
  • 변수는 사용하는 위치에 최대한 가까이 선언한다.
  • 인스턴스 변수는 클래스 맨처음에 선언한다.(자바는 그렇고 c++는 마지막에 선언하는 가위규칙을 적용)
  • 종속함수는 한 함수가 다른 함수를 호출하는 구조이다. 종속함수 구조에서 두 함수는 세로로 가까이 배치하고 호출하는 함수를 호출되는 함수보다 먼저 배치한다.

가로형식 맞추기

  • 짧은 행이 바람직하다. 최대 120자 정도로 행길이를 제한하길 권함

가로공백과 밀집도

  • 가로로는 공백을 사용해 밀접한 개념과 느슨한 개념을 표현한다.
    private void measureLine(String line){
    	lineCount++;
       int lineSize=line.length();
       totalChars+=lineSize;
       lineWidthHistogram.addLine(lineSize,lineCount);
       recordWidestLine(lineSize);
    }
    위 코드는 눈에 확 들어오지도 않고 구분되는 요소가 분명해지진 않다.
    아래 처럼 밀접한 요소는 공백을 주지 않고(함수이름과 괄호사이) 할당문과 인수사이에 공백을 주어 별개의 개념으로 보이도록 강조하였고 보기에도 편하다.
    private void measureLine(String line) {
    	lineCount++;
       int lineSize = line.length();
       totalChars += lineSize;
       lineWidthHistogram.addLine(lineSize, lineCount);
       recordWidestLine(lineSize);
    }
  • 수식에도 연산자 우선순위를 강조하기 위해 공백이 있고 없는 경우가 있지만 ide가 없애는 경우가 흔하다.

가로정렬

  • 코드가 엉뚱한 부분을 강조할 수 있기 때문에 정렬하지 않는걸 추천한다. 또한 정렬이 필요할 정도로 변수의 목록이 길다면 문제점은 목록의 길이다. 선언부가 길다면 클래스로 쪼개야 한다.

들여쓰기

  • 들여쓰기는 파일의 구조를 한눈에 들어오게 하고 가독성을 매우 높여준다. 들여쓰기하지 않은 코드는 분석에 많인 노력을 기울여야 한다.
  • 간단한if문,짧은 while문등 규칙을 무시하고픈 유혹이 생기지만 들여쓰기로 범위를 제대로 표현하자.
    public class CommentWidget extends TextWidget{
    	public String render throws Exception {return "";}
    }
    간단해 보이지만 아래와 같은 코드를 작성하자.
    public class CommentWidget extends TextWidget{
    	public String render throws Exception {
       	return "";
       }
    }

가짜 범위

while(dis.read(buf,0,readBufferSize) != -1)
;

빈 while문이나 for문을 접할 때 이런구조는 좋지 못한 구조이다. 하지만 피할 수 없다면 빈 블록을 올바로 들여쓰고 괄호로 감싸고 세미콜론은 새 행에다 들여써준다.

팀 규칙

  • 팀은 한 가지 규칙에 합의해야 하고 모든 팀원은 팀 규칙을 따라야 한다.

결론

  • 프로젝트를 진행할 때 팀규칙을 정하고 그 규칙을 준수해야 한다.(IDE에 설정)
  • 코드를 읽을 수 있는 글처럼 작성하고 위에서 아래로 읽히듯이 작성해야 한다.
  • 가로,세로로 적절한 개행과 공백을 통해 가독성을 높여야 한다.

좋은 웹페이지 즐겨찾기