본문 바로가기
  • GDG on campus Ewha Tech Blog
3-2기 스터디/클린코드 독서

[2주차] 클린코드 4~6장 정리

by somsoming 2022. 4. 6.

4장 ) 주석

  • 주석은 나쁜 코드를 보완하지 못한다.
    • 표현력이 풍부하고 깔금하며 주석이 거의 없는 코드가 복잡하고 어수선하며 주석이 많이 달린 코드보다 훨씬 좋다.
  • 코드를 의도로 표현하라
  • 좋은 주석
    • 법적인 주석
    • 정보를 제공하는 주석
    • 의도를 설명하는 주석
    • 의미를 명료하게 밝히는 주석
    • 결과를 경고하는 주석
    • TODO 주석 : 프로그래머가 필요하다 여기지만 당장 구현하기 어려운 업무를 기술한다.
    • 중요성을 강조하는 주석
  • 나쁜 주석
    • 주절거리는 주석
    • 같은 이야기를 중복하는 주석
    • 오해할 여지가 있는 주석
    • 의무적으로 다는 주석
    • 있으나 마나 한 주석
    • 함수나 변수로 표현할 수 있다면 주석을 달지 마라
    • 위치를 표시하는 주석
    • 닫는 괄호에 다는 주석
    • 공로를 돌리거나 저자를 표시하는 주석
    • 주석으로 처리한 코드
    • HTML 주석 : 도구로 주석을 뽑아 웹 페이지에 올리려면 주석에 HTML을 삽입하는 것은 도구가 해야한다.
    • 전역 정보
    • 너무 많은 정보
    • 함수 헤더 : 짧고 한 가지만 수행하며 이름을 잘 붙인 함수가 주석으로 헤더를 추가한 함수보다 좋다

 

 

5장 ) 형식 맞추기

프로그래머라면 형식을 깔끔하게 맞춰 코드를 짜야 한다.

코드 형식을 맞추기 위한 간단한 규칙을 정하고 그 규칙을 착실히 따라야 한다.

 

형식을 맞추는 목적

  • 코드의 형식은 중요하다.
  • 코드 형식은 의사소통의 일환이다.

 

  • 적절한 행 길이를 유지하라
    • 자바에서 파일 크기는 클래스 크기와 밀접하다.
    • 신문 기사처럼 작성하라
      • 이름은 간단하면서도 설명이 가능하게 짓는다.
      • 소스 파일 첫 부분은 고차원 개념과 알고리즘을 설명한다.
      • 아래로 내려갈수록 의도를 세세하게 묘사한다.

 

  • 개념은 빈 행으로 분리하라
  • 세로 밀집도 : 연관성을 의미한다. 즉, 서로 밀접한 코드 행은 세로로 가까이 놓여야 한다.
  • 수직 거리 : 서로 밀접한 개념은 세로로 가까이 둬야 한다. 여기서 연관성이란, 한 개념을 이해하는데 다른 개념이 중요한 정도.
    • 변수는 사용하는 위치에 최대한 가까이 선언한다. ex) 루프를 제어하는 변수는 루프문 내부에 선언한다.
    • 인스턴스 변수는 클래스 맨 처음에 선언한다.
    • 종속함수 : 한 함수가 다른 함수를 호출한다면 두 함수는 세로로 가까이 배치한다.
    • 개념적 유사성 : 친화도가 높을수록 코드를 가까이 배치한다.
  • 가로 형식 맞추기짧은 행이 바람직하다.
    • 범위로 이뤄진 계층을 표현하기 위해 코드를 들여쓴다.
    • 클래스 정의처럼 파일 수준인 문장은 들여쓰지 않는다.
    • 클래스 내 메서드는 클래스보다 한 수준 들여쓴다.
    • 메서드 코드는 메서드 선언보다 한 수준 들여쓴다.
    • 블록 코드는 블록을 포함하는 코드보다 한 수준 들여쓴다.
    • 간단한 if문, while문, 짧은 함수 등에서도 들여쓰기를 무시하지 않는다.
  • 팀 규칙 : 팀은 한 가지 규칙에 합의해야 하며, 모든 팀원은 그 규칙을 따라야한다. 그래야 소프트웨어가 일관적인 스타일을 보인다.
  • 좋은 소프트웨어 시스템은 읽기 쉬운 문서로 이루어진다. 따라서 스타일은 일관적이고 매끄러워야 한다.

 

 

 

6장 ) 객체와 자료 구조

  • 자료 추상화
    • 자료를 세세하게 공개하기보다는 추상적인 개념으로 표현하는 편이 좋다.
    • 인터페이스나 조회/설정 함수만으로는 추상화가 이뤄지지 않는다.
    • 따라서 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 고민해야 한다.
  • 자료/객체 비대칭
    • 객체는 추상화 뒤로 자료를 숨긴 채 자료를 다루는 함수만 공개하고, 자료구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다.
    • (자료구조를 사용하는) 절차적인 코드는 기존 자료 구조를 변경하지 않으면서 새 함수를 추가하기 쉽다. 반면, 객체 지향 코드는 기존 함수를 변경하지 않으면서 새 클래스를 추가하기 쉽다.
    • 절차적인 코드는 새로운 자료 구조를 추가하기 어렵다. 그러려면 모든 함수를 고쳐야한다. 반면, 객체지향 코드는 새로운 함수를 추가하기 어려우며, 그러려면 모든 클래스를 고쳐야 한다.
  • 디미터 법칙 : 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.
  • 자료 전달 객체 : 공개 변수만 있고 함수가 없는 클래스
    • DTO (자료 전달 객체)라고도 한다.
    • DTO는 데이터베이스에 저장된 가공되지 않은 정보를 애플리케이션 코드에서 사용할 객체로 변환하는 일련의 단계에서 가장 처음으로 사용하는 구조체.
    • 활성 레코드는 자료 구조로 취급한다.

 

객체는 동작을 공개하고 자료를 숨긴다. 그래서 기존 동작을 변경하지 않으면서 새 객체 타입을 추가하기는 쉬운 반면, 기존 객체에서 새 동작을 추가하기는 어렵다.

자료 구조는 별다른 동작 없이 자료를 노출한다. 그래서 기존 자료구조에 새 동작을 추가하기는 쉬우나, 기존 함수에 새 자료구조를 추가하기는 어렵다.

 

따라서 어떤 시스템을 구현할 때, 새로운 자료 타입을 추가하는 유연성이 필요하면 객체가 더 적합하다. 다른 경우로 새로운 동작을 추가하는 유연성이 필요하면 자료 구조와 절차적인 코드가 더 적합하다.

'3-2기 스터디 > 클린코드 독서' 카테고리의 다른 글

[6주차] 15~16장 정리  (0) 2022.05.22
[5주차] 14장 정리  (0) 2022.05.17
[4주차] 클린코드 11~13장 정리  (0) 2022.05.17
[3주차] 클린코드 7~10장 정리  (0) 2022.04.15
[1주차] 클린코드 1~3장 정리  (0) 2022.04.06

댓글