5장 형식 맞추기
개발은 혼자 하는 것이 아닌, 여러 사람이 진행합니다. 그래서 형식을 논의하고 다 같이 맞추는 것이 매우 중요합니다. 프로젝트의 전반적인 완성도는 사전에 협의된 형식에서부터 시작합니다.
팀 단위로 약속한 형식을 지키는 것이 코드의 품질을 결정하고 향후 Next Step으로 나아가기도 훨씬 수월합니다. 그래서 코드의 형식을 맞춤으로써 우리는 상대방과 의사소통하며 원활하게 맡은 업무를 진행할 수 있습니다.
예시를 이용한 형식 이해하기
우리는 코드를 작성하거나, 읽을 때 TOP에서 BOTTOM으로 이동하고 있으며, IDE 내부에 있는 형식을 일반적으로 활용하고 있습니다.
위 코드를 살펴보면 저자가 강조하는 형식이 잘 지켜짐을 확인할 수 있습니다.
- 신문 기사처럼 작성하라
- 대부분의 글이나 책, 신문 등은 위에서 아래로 읽힌다. ( 그렇게 읽는 것이 익숙하기에 )
- 소스파일의 첫 부분에서는 고차원의 개념을 설명, 아래로 내려갈수록 저차원의 개념을 설명
- 개념은 빈 행으로 분리
- 생각 사이에 빈 행을 넣어 분리
- 이렇게 빈 행으로 분리함으로서 레이아웃에 중요한 영향을 미치며, 코드의 가독성이 증가
- 빈 행 없이 코드만 줄줄이 있으면 눈이 피로하고, 읽는 사람 입장에서는 불편함을 느낌
- 세로 밀집도
- 밀집도가 높은 코드는 세로 가까이 놓아야 함
- 밀집도에 따라 코드를 배치하면 가독성이 높아짐 → 피로 감소 및 생산성 향상
**< BEFORE >** public class ReporterConfig{ /** * 리포터 리스너의 클래스 이름. */ private String m_className; /** * 리포터 리스너의 속성. */ private List<Property> m_properties = new ArrayList<Property>(); public void addProperty(Property property){ m_properties.add(property); } } **< AFTER >** public class ReporterConfig{ private String m_className; private List<Property> m_properties = new ArrayList<Property>(); public void addProperty(Property property){ m_properties.add(property); } }
- 변수 선언
- 관련성이 높은 변수는 사용하는 위치에 최대한 가까이 선언
들여쓰기
들여쓰기는 왜 중요할까?
우리가 작성하는 코드에서 Scope를 확인할 수 있다. 어떻게 Scope를 확인하냐고? 바로 들여쓰기 때문이다.
들여쓰기의 정도는 코드가 위치한 계층 수준에 따라 달라진다. 들여쓰기가 없다면 어떤 느낌일까?
진짜 완전 대충짠 로직이다.
for(int i=0; i<10; i++){ sum = i+i; i++; ....아하 로직 }
로직이 간단해서 이해하기는 쉽지만, 우리의 미간을 찌푸리게 한다.
for (int i=0; i<10; i++)
{
sum = i+i; i++;
....아하 로직 W
}
뭔가 더욱 로직이 직관적으로 느껴지지 않는가?
사람마다 예외는 있지만 일반적으로 후자의 방식을 선호할 것이다.
if 문과 for문 등등에서는 한 줄짜리 로직이 있을 수도 있는데 이렇게 작성하는 사람이 있을수도 있다.
for( int i=9; i<100; i++ ) total +=i;
반면에 나는 위와 같은 case에서도 아래와 같은 방식을 선호한다.
for( int i=9; i<100; i++ ) {
total +=i;
}
**코드는 조금 더 길어졌지만 더욱 직관적이고 한눈에 들어온다고 생각하기 때문이다.**
마지막으로 책에서 나오는 밥아저씨의 형식 규칙 일부를 인용해서 이번 챕터를 마무리 하려고 한다.
밥 아저씨의 형식과 내 형식이 비슷한지 확인해보고, 다르다면 왜 다를까에 대해 생각해보면 좋을 것 같다.
형식을 맞추는 일도 중요하지만, 내가 왜 이렇게 작성했는지에 대해서 고민하고 고찰하는 것 또한 중요하다고 생각한다.
형식에 정답은 없지만, 타인과 협업을 한다면 더욱 깔끔하게 작성하도록 노력해보자..
public class CodeA implement JavaFile {
private int count;
private int maxLineWidth;
private LineWidthD lineWidthD;
public CodeA() {
lineWidthD = new LineWidthD();
}
public static List<File> findJavaFiles(File parentD) {
List<File> files = new ArrayList<List>();
findJavaFiles(parentD, files);
return files;
}
... 이하 로직 생략
public int getCount(){
return count;
}
... 이하 로직 생략
}
'책 읽기' 카테고리의 다른 글
[Clean Code/클린 코드] - 오류 처리 (0) | 2023.06.18 |
---|---|
[Clean Code/클린 코드] - 객체와 자료구조 (0) | 2023.06.18 |
[Clean Code/클린 코드] - 주석 (0) | 2023.06.04 |
[Clean Code/클린 코드] - 함수 (0) | 2023.05.29 |
[Clean Code/클린 코드] - 의미있는 이름 (0) | 2023.05.29 |