공부하는 스누피
Clean Code 메모 정리 본문
리팩토링 공부하는 겸 예전에 Clean Code를 읽으면서 정리했던 메모를 블로그에 쓰기로 했다.
책 읽을 때는 나름 중요한 부분만 메모했다고 생각했는데 분량이 너무 많아 코딩에 관련된 부분만 요약했다.
요약본의 요약이기 때문에 빠진 내용이 많다. 일단 먼저 훑어 보고 시간 날 때 책을 정독하는 것을 추천한다.
* 메모 정리의 목차는 책의 목차와 다르다.
1. 이름
- 의도가 분명하게 이름을 지어라.
좋은 예 | 나쁜 예 |
발음하기 쉬운 이름 | 한 단어를 여러 가지 목적으로 사용(ex. queue에 add쓰기) |
검색하기 쉬운 이름 | 널리 쓰이는 이름(ex. List) |
함수는 서술적인 이름을 가져야 함 | |
- 이름 길이는 범위 크기에 비례해야 한다. (int i ----> int maxValue -----> static final int USER_ID_MAX_LIMIT)
- 클래스/객체 이름은 명사나 명사구로 한다. 메서드 이름은 동사나 동사구로 한다.
- 접근자 : get, 변경자 : set, 조건자 : is 를 앞에 붙인다.
- 함수의 이름과 기능을 일치되게 한다.
2. 구조
- 내려가기 규칙 : 아래로 갈수록 추상화 수준이 낮아져야 한다. like 신문기사
- 개념은 빈 행으로 구분한다.
- 세로 밀집도: 연관성을 의미함 (* 연관성: 한 개념을 이해하는 데 다른 개념이 중요한 정도)
- 변수는 사용하는 위치에 가까워야 한다.
- 호출하는 함수를 호출되는 함수보다 먼저 배치한다.
- 가로 공백: 왼쪽 요소와 오른쪽 요소가 분명하게 나뉘는 경우에 넣기 (e.g. 함수와 인수는 개념적으로 하나이기 때문에 공백 x)
- 계산을 여러 단계로 나누고 중간 값으로 서술적인 변수 이름을 사용해라.
3. 좋은 주석
1) 법적인 주석 : 저작권, 소유권 정보
2) 기본적인 정보를 제공하는 주소
3) 의도를 설명하는 주석
4) 의미를 명료하게 밝히는 주석
5) 결과를 경고하는 주석
6) TODO 주석 : 필요하다 여기지만 당장 구현하기 어려운 기술
7) 중요성을 강조하는 주석
8) 공개 api 구현시 Javadocs를 작성
=> 중첩이 심할 때 닫는 괄호에 주석을 단다.
=> 주석은 근처에 있는 코드만 기술해야 한다.
4. 디미터 법칙
: 모듈은 자신이 조작하는 객체의 속사정을 몰라야 한다.
=> 클래스의 메서드는 해당 클래스나 인스턴스에 연결된 것만 호출해야 한다.
단, 반환하는 객체의 메서드는 호출하면 안 된다.(train wreck)
5. 오류 처리
- 오류 코드보다 예외를 사용하자. 논리가 오류 코드와 뒤섞이지 않는다.
- 예외 처리할 경우 try-catch-finally문부터 작성하자.
- 오류 처리를 프로그램 논리와 분리하면 독립적인 추론이 가능해진다.
6. 함수
- 함수에서 인수 개수는 작을수록 좋다.
- boolean 타입의 플래그 인수는 함수가 여러 기능을 수행한다는 증거!
- 함수 인수를 넘겨 동작을 선택하지 말자.
- 함수는 한가지 임무만 수행한다.
- 시간적 결합 => 함수가 호출되는 순서를 명백히 드러내야 한다.
- 경계 조건은 캡슐화한다. (하드 코딩 x)
- 함수 내 모든 문장은 추상화 수준이 동일해야 한다.
7. DRY
Don't Repeat Your code
=> 코드에서 중복을 발견할 때마다 추상화할 기회로 여기자.
<중복유형>
1) ctrl + V된 코드 -> 함수로
2) if else, switch 중복 -> 다형성으로
3) 알고리즘이 유사하지만 코드가 다름 -> 템플릿 메서드 패턴
(참고)
Clean Code: 애자일 소프트웨어 장인 정신. 로버트 C. 마틴 (박재호 이해영 역). 인사이트
snoop-study.tistory.com/67?category=917080
'정리 모음' 카테고리의 다른 글
[Jenkins] GitHub custom status check (0) | 2022.07.01 |
---|---|
SonarQube 8.9 연동 가이드 (0) | 2022.06.24 |
도커(Docker) 사용법 (0) | 2021.01.01 |
슈도코드(의사코드, pseudocode) 가이드라인 (0) | 2020.10.19 |
[기술면접]자료구조 정리 (0) | 2020.10.19 |