반응형
형식을 깔끔하게 맞춰 코드를 짜야 한다.
코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.
팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다.
필요하다면 규칙을 자동으로 적용하는 도구를 활용한다.
형식을 맞추는 목적
- 융통성없이 맹목적으로 따르면 안된다.
- 코드 형식은 의사소통의 일환이다.
- 의사소통은 전문 개발자의 일차적인 의무다.
- 돌아가는 코드가 전문 개발자의 일차적인 의무라 여길지도 모르겠다.
- 하지만 이 책을 읽으면서 생각이 바뀌었기 바란다.
- 오늘 구현한 기능이 다음 버전에서 바뀔 확률은 아주 높다.
- 그런데 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 끼친다.
- 오랜 시간이 지나 원래 코드의 흔적을 더 이상 찾아보기 어려울 정도로 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 끼친다.
- 원래 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다.
- 그렇다면 원활한 소통을 장려하는 코드 형식은 무엇일까?
적절한 행 길이를 유지하라
- 500줄을 넘지 않고 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다.
- 반드시 지킬 규칙은 아니지만 바람직한 규칙으로 삼으면 좋겠다.
신문 기사처럼 작성하라
- 독자는 위에서 아래로 기사를 읽는다.
- 위에는 고차원, 내려갈수록 세세하게
개념은 빈 행으로 분리하라
- 일련의 행 묶음은 완결된 생각 하나를 표현한다.
- 생각 사이는 빈 행을 넣어 분리한다.
세로 밀집도
- 줄바꿈이 개념을 분리한다면 세로 밀집도는 연관성을 의미한다.
- 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다.
수직 거리
- 함수 연관 관계와 동작 방식을 이해하려고 이 함수에서 저 함수로 오가며 소스 파일을 위아래로 뒤지는 등 뺑뺑이를 돌았으나 결국은 미로 같은 코드 떄문에 혼란만 가중된 경험이 있는가? 그렇다.
- 함수나 변수가 정의된 코드를 찾으러 상속 관계를 줄줄이 거슬러 올라간 경험이 있는가?
- 이조각 저조각이 어디에 있는지 찾고 기억하느라 시간과 노력을 소모한다.
- 서로 밀접한 개념은 세로로 가까이 둬야 한다.
- 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 마땅하다.
- 같은 파일에 속할 정도로 밀접한 두 개념은 세로 거리로 연관성을 표현한다.
변수 선언
- 사용하는 위치에 최대한 가까이 선언한다.
- 지역변수는 각 함수 맨 처음에 선언
- 루프 제어 변수는 루프 문 내부에 선언
- 루프 직전에 변수를 선언하는 경우는 다소 긴 함수인 경우
인스턴스 변수
- 인스턴스 변수는 클래스 맨 처움에 선언한다.
- 변수 간에 세로로 거리를 두지 않는다.
[!NOTE]
잘 설계한 클래스는 많은 클래스 메서드가 인스턴스 변수를 사용하기 때문이다.
- 인스턴스 변수를 선언하는 위치는 아직도 논쟁이 분분하다.
- C++에서는 모든 인스턴스 변수를 클래스 마지막에 선언한다는 소위 가위 규칙(scissors rule)을 적용한다.
- 하지만 자바에서는 보통 클래스 맨 처음에 인스턴스 변수를 선언한다.
- 나로서는 어느 쪽이든 이유가 없다.
- ==잘 알려진 위치에 인스턴스 변수를 모은다는 사실이 중요하다.==
- 변수 선언을 어디서 찾을지 모두가 알고 있어야 한다.
종속 함수
- 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다.
- 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
개념적 유사성
- 어떤 코드는 서로 끌어당긴다.
- 개념적인 친화도가 높기 때문이다.
- 친화도가 높은 요인
- 호출하는 관계. 직접적인 종속성
- 변수와 그 변수를 사용하는 함수
- 비슷한 동작을 수행하는 일군의 함수
- 명명법이 똑같고 기본 기능이 유사하고 간단하다.
- 서로가 서로를 호출하는 관계는 부차적인 요인이다.
- 종속적인 관계가 없더라도 가까이 배치할 함수들이다.
가로 형식 맞추기
- 프로그래머는 명백하게 짧은 행을 선호한다.
- 20자에서 60자 사이가 전체의 40%
- 10자 미만은 30자
- 80자 이후부터는 급격하게 감소
- 100자나 120자도 나쁘지 않다. 하지만 그 이상은 주의 부족이다.
가로 공백과 밀집도
가로 정렬
- 탭 맞춰서 정렬하는거
- 정렬이 필요할 정도로 목록이 길다면 문제는 목록 길이지 정렬 부족이 안다.
- 아래 코드처럼 선언부가 길다면 클래스를 쪼개야 한다는 의미다.
들여쓰기
들여쓰기 무시하기
- 간단한 if문, 짧은 while문, 짧은 함수에서 무시하고픈 유혹이 생긴다.
- 한줄에 범위를 뭉뚱그린 코드를 피한다. 원점으로 돌아가 들여쓰기를 넣어라.
가짜 범위
- 빈 반복문
- 빈 조건문
- 하지마라
팀 규칙
- 팀 규칙이라는 제목은 말 장난이다.
- 프로그래머라면 각자 선호하는 규칙이 있다.
- 하지만 팀에 속한다면 자신이 선호해야 할 규칙은 바로 팀 규칙이다.
- 팀은 한 가지 규칙에 합의해야 한다.
- 그리고 모든 팀원은 그 규칙을 따라야 한다.
- 개개인이 따로국밥처럼 맘대로 짜대는 코드는 피해야 한다.
- 스타일 논의하는데 오랜 시간이 걸리지 않는다.
- 어디에 괄호를 넣을지
- 들여쓰기는 몇자리로 할지
- 클래스와 변수와 메서드 이름은 어떻게 지을지 등을 결정했다.
- 그리고 IDE 코드 형식기를 설정한 후 사용한다.
반응형
'스터디 > 클린코드 노마드 북클럽' 카테고리의 다른 글
북클럽 클린코드 7장. 오류 처리 (0) | 2024.07.03 |
---|---|
북클럽 클린코드 6장. 객체와 자료 구조 (1) | 2024.07.01 |
북클럽 클린코드 4장. 주석 (0) | 2024.06.27 |
북클럽 클린코드 3장. 함수 (0) | 2024.06.26 |
북클럽 클린코드 2장. 의미 있는 이름 (0) | 2024.06.24 |
댓글