Language/Java

[클린 코드] Ch.5 - 형식 맞추기

비소_ 2022. 8. 10.

클릭하시면 네이버 Book으로 연결됩니다!

해당 서적을 참고하여 개인 공부용으로 정리한 글입니다.


형식을 맞추는 목적

코드 형식은 의사소통의 일환이며 의사소통은 개발자의 일차적 의무다.

시간이 지나 기존 코드가 사라지더라도 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속해서 영향을 미친다.

또한, 개발자의 스타일과 규율은 사라지지 않는다.


적절한 행 길이를 유지할 것

JUnit, Fitnesse, Tomcat 등 유명한 프로젝트의 파일 크기(라인 수)를 조사한 결과 200줄 대로도 커다란 시스템을 구축할 수 있다는 사실을 알 수 있었다.

일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.

신문 기사처럼 작성할 것

이름은 제목처럼 간단하면서도 설명이 가능하게 짓는다.

소스 파일 첫 부분은 첫 문단 처럼 고차원 개념과 알고리즘을 설명하는 등 전체 기사 내용을 요약한다.

아래로 내려갈수록 의도를 세세하게 표현하고, 마지막에는 가장 저차원 함수와 세부 내역이 나온다.

개념은 빈 행으로 분리할 것

각 행은 수식이나 절을 나타내고, 일련의 행 묶음은 완결된 생각 하나를 표현한다.

생각 사이에는 빈 행을 넣어 분리한다.

세로 밀집도

밀접한 코드 행은 가까이 놓는다.

수직 거리

동작 방식을 이해하기 위해 여기저기 돌아다닌 경험이 있을 것이다.

이런 경험을 피하기 위해 마땅한 이유가 없다면 밀접한 개념은 한 파일에 속해야 한다. (protected 를 피해야 하는 이유)

변수 선언

지역 변수는 사용하는 위치에 최대한 가까이 선언한다.

(함수를 짧게 작성할 것이므로 맨 처음에 선언)

 

인스턴스 변수는 클래스 맨 처음에 선언한다. 또한, 세로로 거리를 두지 않는다.

종속 함수

한 함수가 다른 함수를 호출하면 두 함수를 세로로 가까이 배치한다.

가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.

개념적 유사성

친화도가 높을수록 코드를 가까이 배치한다.

친화도가 높은 요인은 여러 가지인데, 오버로딩 메서드나, 기본 기능이 유사한 함수들은 개념적 친화도가 높으므로 종속적인 관계가 아니더라도 가까이 배치할 함수들이다.

세로 순서

일반적으로 함수 호출 종속성은 아래 방향으로 유지한다. (고차원 → 저차원)

세세한 사항은 최대한 마지막에 표현한다.


가로 형식 맞추기

마찬가지로 프로젝트를 조사한 결과 80자를 넘는 행은 급격하게 적어진다.

일반적으로 20~60자 사이를 선호했다.

가로 공백과 밀집도

공백을 넣으면 한 개념이 아니라 별개로 보인다.

연산자 우선순위를 강조하기 위해서도 사용할 수 있지만 IDE는 우선순위를 고려하지 못해 수식에 똑같은 간격을 적용한다.

가로 정렬

정렬이 필요할 정도로 목록이 길다면 문제는 목록 길이지 정렬 부족이 아니다.

들여 쓰기

들여쓰기 정도는 계층에서 코드가 자리잡은 수준에 비례한다.

들여쓰기 무시하기

가끔은 간단하고 짧은 if/while 문의 경우 들여쓰기를 무시하고싶은 유혹이 생긴다.

그래도 원점으로 돌아가 들여쓰기를 넣는다.

가짜 범위

빈 while/for 문은 최대한 피하고, 그렇지 못할 때는 빈 블록을 올바르게 들여쓰고 괄호로 감싼다.


팀 규칙

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

한 소스파일에서 봤던 형식이 다른 소스 파일에도 쓰이리라는 신뢰감을 줘야한다.

온갖 스타일을 뒤섞지 말자.

댓글