본문 바로가기
독서/클린 코드

클린 코드 (Clean Code) - 5장 형식 맞추기

by Sondho 2022. 2. 8.

노션 정리

 

5장 형식 맞추기

책에서 기억하고 싶은 내용을 써보세요.

sondho.notion.site

 

😃 책에서 기억하고 싶은 내용을 써보세요.

  • 코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 따라야 한다. 팀으로 일한다면 팀이 합의해 규칙을 정하고 모두가 그 규칙을 따라야 한다. 필요하다면 규칙을 자동으로 적용하는 도구를 활용한다.

형식을 맞추는 목적

  • 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다.
  • 코드가 바뀌어도 맨 처음 잡아놓은 구현 스타일과 가독성 수준은 유지보수 용이성과 확장성에 계속 영향을 미친다.
  • 원래 코드는 사라질지라도 개발자의 스타일과 규율은 사라지지 않는다.

적절한 행 길이를 유지하라

  • 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.
  • 신문 기사처럼 작성하라
    • 이름만 보고도 올바른 모듈을 살펴보고 있는지 아닌지를 판단할 정도로 신경 써서 짓는다. 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다. 아래로 내려갈수록 의도를 세세하게 모사한다. 마지막에는 가장 저차원 함수와 세부 내역이 나온다.
    • 신문이 사실, 날짜, 이름 등을 무작위로 뒤섞은 긴 기사 하나만 싣는다면 아무도 읽지 않으리라.
  • 개념은 빈 행으로 분리하라
    • 빈 행은 새로운 개념을 시작하다는 시각적 단서다. 코드를 읽어 내려가다 보면 빈 행 바로 다음 줄에 눈길이 멈춘다.
    • 빈 행으로 분리하지 않으면 코드 가독성이 현저하게 떨어진다.
  • 세로 밀집도
    • 줄바꿈이 개념을 분리한다면 세로 밀집도는 연광성을 의미한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다는 뜻이다.
  • 수직 거리
    • 서로 밀접한 개념은 세로로 가까이 둬야 한다. 물론 두 개념이 서로 다른 파일에 속한다면 규칙이 통하지 않는다. 하지만 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 마땅하다.
    • 변수 선언
      • 사용하는 위치에 최대한 가까이 선언한다.
      • 지역변수는 각 함수 맨 처음에 선언한다.
    • 인스턴스 변수
      • 클래스 맨 처음에 선언한다.
      • 변수 간에 세로로 거리를 두지 않는다.
      • 일반적으로 c++에서는 모든 인스턴스 변수를 클래스 마지막에 선언한다는 소위 가위 규칙(scis-sors rule)을 적용한다. 하지만 자바에서는 보통 클래스 맨 처음에 인스턴스 변수를 선언한다.
      • 잘 알려진 위치에 인스턴스 변수를 모은 다는 사실이 중요하다. 변수 선언을 어디서 찾을지 모두가 알고 있어야 한다.
    • 종속 함수
      • 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다. 또한 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
      • 호출되는 함수를 찾기가 쉬워지며, 그만큼 모듈 전체의 가독성도 높아진다.
    • G35: 설정 정보는 최상위 단계에 둬라
      • 추상화 최상위 단계에 둬야 할 기본값 상수나 설정 관련 상수를 저차원 함수에 숨겨서는 안 된다. 대신 고차원 함수에서 저차원 함수를 호출할 때 인수로 넘긴다.
    • 개념의 유사성
      • 친화도가 높을수록 코드를 가까이 배치한다.
      • e.g. 한 함수가 다른 함수를 호출해 생기는 직접적인 종속성 변수와 그 변수를 사용하는 함수 비슷한 동작을 수행하는 일군의 함수 명명법이 똑같고 기본 기능이 유사하고 간단한 코드
  • 세로 순서
    • 호출되는 함수를 호출하는 함수보다 나중에 배치한다.
    • 가장 중요한 개념을 표현할 때는 세세한 사항을 최대한 배제한다. 세세한 사항은 가장 마지막에 표현한다.

가로 형식 맞추기

  • 짧은 행이 바람직하다.
  • 개인적으로는 120자 정도로 행 길이를 제한한다.
  • 가로 공백과 밀집도
    • 공백을 넣으면 한 개념이 아니라 별개로 보인다.
    • 할당 연산자를 강조하기 위한 앞 뒤 공백을 준다.
    • 함수 이름과 이어지는 괄호 사이에는 함수와 인수가 서로 밀접하므로 공백을 넣지 않는다.
    • 함수를 호출하는 코드에서는 쉼표를 강조해 인수가 별개라는 괄호 안 인수를 공백으로 분리한다.
    • 연산자 우선순위를 강조하기 위해서도 공백을 사용한다.
  • 가로 정렬
    • 지나친 가로 정렬은 유용하지 못하다. 코드가 엉뚱한 부분을 강조해 진짜 의도가 가려지기 때문이다.
    • 정렬이 필요할 정도로 목록이 길다면 문제는 목록 길이지 정렬 부족이 아니다.
    • 선언부가 길다면 클래스를 쪼개야 한다.
  • 들여쓰기
    • 들여쓰기 한 파일은 구조가 한눈에 들어온다.
    • 간단한 if문, 짧은 while문, 짧은 함수라도 들여쓰기로 범위를 제대로 표현한다.
  • 가짜 범위
    • 빈 whlie문이나 for문을 피하지 못할 때에는 빈 블록을 올바로 들여쓰고 괄호로 감싼다. 세미콜론(;)은 새 행에다 제대로 들여써서 넣어준다.

팀 규칙

  • 팀은 한 가지 규칙을 합의해야 한다. 그리고 모든 팀원은 그 규칙을 따라야 한다. 그래야 소프트웨어가 일관적인 스타일을 보인다.

 

🤔 오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요.

  • 각 그룹마다 코딩 컨벤션 (Coding Convention)이 존재하는 이유를 알게 되었다. 확실히 팀 단위로 코드를 작성할 때 규칙을 지키지 않고 각자가 다른 스타일로 코딩을 한다면 팀원 누구라도 코드 전체를 이해하는 데 많은 시간이 걸릴 것 같다.

댓글