클린코드 5, 6장 정리

허준기·2025년 4월 5일
2

클린코드

목록 보기
3/7
post-thumbnail

이번 주 클린 코드는 5, 6장이다

제 5장 형식 맞추기

  • 형식을 맞추는 목적

    • 코드 형식은 의사소통의 일환이다. 의사소통은 전문 개발자의 일차적인 의무다
  • 적절한 행 길이를 유지하라

    • 일반적으로 큰 파일보다 작은 파일이 이해하기 쉽다.
  • 신문 기사처럼 작성하라

    • 이름은 간단하면서도 설명이 가능하게
    • 아래로 내려갈수록 의도를 세세하게 묘사
  • 개념은 빈 행으로 분리하라

    • 패키지 선언부, import 문, 각 함수 사이에 빈 행을 넣어 분리해라
      → 이건 확실히 코드가 깔끔해보여서 잘 적용하고 있다
  • 세로 밀집도

    • 세로 밀집도는 연관성을 의미
    • 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다
  • 수직 거리

    • 서로 밀접한 개념은 세로로 가까이 둬야 한다
    • 타당한 근거가 없다면 서로 밀접한 개념은 한 파일에 속해야 마땅하다 → protected 변수를 피해야 하는 이유 중 하나
      → 나는 한 메서드에 포함된 여러 메서드들을 가장 큰 메서드 아래에 순서대로 배치하는 방식으로 코드를 짠다
  • 변수 선언

    • 변수는 사용하는 위치에 최대한 가까이 선언
    • 인스턴스 변수
      • 인스턴스 변수는 클래스 맨 처음에 선언
  • 종속 함수

    • 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다
    • 가능하다면 호출하는 함수를 호출되는 함수보다 먼저 배치한다 → 오 위에서 말한거다
  • 개념적 유사성

    • 친화도가 높을수록 코드를 가까이 배치
  • 가로 형식 맞추기

    • 짧은 행이 바람직하다
    • 20 ~ 60자가 40%
  • 가로 공백과 밀집도

    • 연산자나 쉼표 뒤는 공백을 넣으라는 당연한 규칙 → 근데 요즘 교육하면서 코드를 보면 처음하는 사람들에게는 당연하지 않은 것 같다. 나도 처음에 공백 안넣었던것 같다...
  • 들여쓰기

    • 범위로 이뤄진 계층을 표현하기 위해 코드를 들여쓰자
      → 분기문을 사용할 때 특히 중요한 것 같다
  • 팀 규칙

    • 팀에 속한다면 자신이 선호해야 할 규칙은 바로 팀 규칙이다 → 우리도 코드 컨벤션이 있지만 나는 과연 그걸 지키는가..를 생각해보면 철저하게 지키지는 못하는 것 같다
  • return 개행

    • 이건 내용에 없는데 그냥 쓴다. 나는 반환 값이 있는 메서드에서 return 전에 개행을 한 번 해주는데 밥아저씨는 그러지 않는다.. 뭔가 return 전에 개행을 해주면 분리하는 느낌이 들어서 좋은데 이건 다른 사람들과 얘기를 한 번 해보고 싶다

제 6장 객체와 자료 구조

  • 자료 추상화

    • 변수를 private로 선언하더라고 각 값마다 get, set을 제공한다면 구현을 외부로 노출하는 셈이다
    • 변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다 → 헉 그렇네 이것도 정보은닉과 캡슐화에 위배되는게 아닐까 라는 생각을 방금 처음 했따
    • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다
  • 자료/객체 비대칭

    • 객체지향 코드에서 어려운 변경은 절차적인 코드에서 쉬우며, 절차적인 코드에서 어려운 변경은 객체 지향 코드에서 쉽다
  • 디미터 법칙

    • 모듈은 잣니이 조작하는 객체의 속사정을 몰라야 한다
  • 기차 충돌

    	final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();
    • 위와 같은 코드들을 기차 충돌이라 부른다 → 저렇게 쓴 적 많은데 찔린다
    Options opts = ctxt.getOptions();
    File scratchDir = opts.getScratchDir();
    final String outputDir = scratchDir.getAbsolutePath();
    • 나누면 이렇게 나눌 수 있다고 한다. → 이건 좀 적용해 봐야겠다..
  • 자료 전달 객체(DTO)

    • 공개 변수만 있고 함수가 없는 클래스
    • DB에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 사용
  • 활성 레코드

    • 공개 변수가 있거나 비공개 변수에 조회/설정 함수가 있는 자료 구조지만, 대개 ssavefind와 같은 탐색 함수도 제공
  • 결론

  • 객체는 동작을 공개하고 자료를 숨긴다

  • 자료구조는 별다른 동작 없이 자료를 노출한다

  • 둘 중 상황에 맞는 방식을 선택하여 사용하자

profile
나는 허준기

0개의 댓글