티스토리 뷰

도서/클린 코드

형식 맞추기

woo'^'chang 2022. 7. 10. 20:11

깔끔하고 일관적이고 꼼꼼하고 감탄하고 탄복하고 놀라게 만드는 코드를 작성하고 싶습니다.

 

프로그래머라면 프로그래머가 되고 싶다면 코드를 작성하는 규칙을 정하고 규칙을 착실하게 따라야 합니다. 그러기 위해서는 규칙을 정하는 것이 필요하고 규칙을 정하는 것에도 많은 시간을 투자해야 합니다.

위의 사진은 실제로 저희 개발팀이 팀 단위 프로젝트를 시작하기 전 지켜야 할 규칙과 설명을 정리해둔 노션 페이지입니다. 규칙을 잘 정리해두었기에 프로젝트를 진행하면서 방향을 잃지 않고 성공적으로 프로젝트를 마무리할 수 있었다고 생각합니다.

 

코드 형식은 매우 중요하고 의사소통의 일환입니다. 기존 코드가 변경되어 사라질 수는 있어도 코드 형식과 규율은 사라지지 않습니다. 이번 장을 통해 원활한 소통을 장려하는 코드 형식을 알아보고자 합니다.

적절한 행 길이를 유지하라

자바 소스 파일의 크기는 어느 정도로 잡아야 적당할까요? 대다수의 자바 소스 파일을 확인한 결과 평균 200줄 정도, 500줄을 넘지 않고 커다란 시스템 구축이 가능했다고 합니다.

 

처음부터 소스 파일의 크기를 정하고 코드를 작성하기에는 어려움이 따르기에 아래의 방법을 생각하며 코드를 작성해 나가야 합니다.

신문 기사처럼 작성하라

독자는 위에서 아래로 읽어 나가기 때문에 처음에 표제를 제시하고 세세한 사실은 아래로 진행하며 드러나야 합니다. 코드도 이와 비슷한 맥락으로 작성해 나갑니다.

개념은 빈 행으로 분리하라

코드에는 각각의 개념이 존재하는데 개념과 개념 사이는 빈 행으로 분리할 수 있도록 합니다. 빈 행을 통해 하나의 개념이 완결되었음을 명시적으로 표시해야 합니다.

세로 밀집도

세로로 밀집된 것은 연관성을 의미합니다. 개념은 분리하지만, 연관성이 존재한다면 밀집시켜 한눈에 파악할 수 있도록 합니다.

수직 거리
  • 변수 선언
    • 변수는 사용하는 위치에 최대한 가까이 선언합니다.
  • 인스턴스 변수
    • 인스턴스 변수는 클래스 맨 처음에 선언합니다. 대다수 클래스 메서드가 인스턴스 변수를 사용하기 때문입니다.
  • 종속 함수
    • 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치합니다.
    • 호출하는 함수를 호출되는 함수보다 먼저 배치하는 것을 권장합니다.
  • 개념적 유사성
    • 개념적인 친화성으로 인해 끌어당기는 코드가 존재한다면 가까이 배치합니다.
    • 오버로딩 같은 예가 존재합니다.
세로 순서

일반적으로 함수 호출 종속성은 아래로 유지합니다. 중요한 개념을 먼저 표현하고 세세한 사항을 다음에 표현한다는 의미로 쓰이게 됩니다.

가로 형식 맞추기

가로 길이도 위와 같은 프로젝트를 대상으로 조사해 보았다고 합니다. 결과는 놀랍도록 규칙적으로 나오게 되었는데 20자에서 60자 사이의 행이 40%에 달한다고 조사되었습니다.

 

과거에는 모니터 길이가 짧았기에 위의 길이를 선호하였으나 모니터의 발전으로 크기는 커지게 되었고 필자는 120자를 기준으로 제한한다고 합니다.

가로 공백과 밀집도

함수와 인수는 밀접한 관계를 맺기 때문에 공백을 넣지 않습니다. 또한 연산자를 사용할 때도 높은 우선순위에 있는 것은 붙이도록 하여 우선순위를 강조합니다.

들여쓰기

범위로 이루어진 계층을 표현하기 위해 들여쓰기를 사용합니다. 들여쓰기의 가장 큰 장점은 한눈에 구조를 파악하기 쉽다는 점입니다.

가짜 범위
while (dis.read(buf, 0, readBufferSize) != -1)
;

다음과 같이 빈 while문을 쓸 때 한 줄로 작성하곤 하였는데 새 행에 세미콜론(;)을 작성하는 방법을 사용하니 더욱 명시적으로 표현할 수 있습니다.

마치며

무조건적인 규칙이 정해져 있는 것이 아니라 유동적으로 규칙을 정하고 따라야 합니다. 하지만 그 과정에 코드를 읽는 사람은 나 뿐이 아님을 인식하고 규칙을 정하도록 해야 합니다.

'도서 > 클린 코드' 카테고리의 다른 글

오류 처리  (0) 2022.07.16
객체와 자료 구조  (0) 2022.07.12
주석  (0) 2022.07.09
함수  (0) 2022.07.07
의미 있는 이름  (0) 2022.07.05
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Total
Today
Yesterday