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 |
댓글