책 읽기

[Clean Code/클린 코드] - 형식 맞추기

지팡구 2023. 6. 4. 15:19

5장 형식 맞추기

개발은 혼자 하는 것이 아닌, 여러 사람이 진행합니다. 그래서 형식을 논의하고 다 같이 맞추는 것이 매우 중요합니다. 프로젝트의 전반적인 완성도는 사전에 협의된 형식에서부터 시작합니다.

 

팀 단위로 약속한 형식을 지키는 것이 코드의 품질을 결정하고 향후 Next Step으로 나아가기도 훨씬 수월합니다. 그래서 코드의 형식을 맞춤으로써 우리는 상대방과 의사소통하며 원활하게 맡은 업무를 진행할 수 있습니다.

 

예시를 이용한 형식 이해하기

우리는 코드를 작성하거나, 읽을 때 TOP에서 BOTTOM으로 이동하고 있으며, IDE 내부에 있는 형식을 일반적으로 활용하고 있습니다.

 

 

위 코드를 살펴보면 저자가 강조하는 형식이 잘 지켜짐을 확인할 수 있습니다.

  1. 신문 기사처럼 작성하라
    • 대부분의 글이나 책, 신문 등은 위에서 아래로 읽힌다. ( 그렇게 읽는 것이 익숙하기에 )
    • 소스파일의 첫 부분에서는 고차원의 개념을 설명, 아래로 내려갈수록 저차원의 개념을 설명
  2. 개념은 빈 행으로 분리
    • 생각 사이에 빈 행을 넣어 분리
    • 이렇게 빈 행으로 분리함으로서 레이아웃에 중요한 영향을 미치며, 코드의 가독성이 증가
    • 빈 행 없이 코드만 줄줄이 있으면 눈이 피로하고, 읽는 사람 입장에서는 불편함을 느낌
  3. 세로 밀집도
    • 밀집도가 높은 코드는 세로 가까이 놓아야 함
    • 밀집도에 따라 코드를 배치하면 가독성이 높아짐 → 피로 감소 및 생산성 향상
    **< 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);
        }
    }
    
  4. 변수 선언
    • 관련성이 높은 변수는 사용하는 위치에 최대한 가까이 선언

들여쓰기

들여쓰기는 왜 중요할까?

 

우리가 작성하는 코드에서 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;
	}

...  이하 로직 생략

}