[클린코드] 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)
;
- 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)
;
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);
}
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에 설정)
- 코드를 읽을 수 있는 글처럼 작성하고 위에서 아래로 읽히듯이 작성해야 한다.
- 가로,세로로 적절한 개행과 공백을 통해 가독성을 높여야 한다.
Author And Source
이 문제에 관하여([클린코드] 5장 형식 맞추기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@dbtlwns/클린코드-5장-형식-맞추기
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
- 프로젝트를 진행할 때 팀규칙을 정하고 그 규칙을 준수해야 한다.(IDE에 설정)
- 코드를 읽을 수 있는 글처럼 작성하고 위에서 아래로 읽히듯이 작성해야 한다.
- 가로,세로로 적절한 개행과 공백을 통해 가독성을 높여야 한다.
Author And Source
이 문제에 관하여([클린코드] 5장 형식 맞추기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dbtlwns/클린코드-5장-형식-맞추기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)