[클린코드] 2장~5장
2장 의미 있는 이름
1. 명확한 이름은 코드를 읽으면서 함수의 내용을 파악할 수 있게 돕는다.
2. 의미가 불분명한 불용어의 사용하지 않는다.
- Info, Data, a, an, the 와 같은 불용어. 물론 의미가 분명이 다르다면 사용해도 무방하다.
- nameString vs name : name 이 float 가 될 가능성이 있는가?
- 과거에는 변수에 타입을 넣는 것이 중요하지만, 더이상 변수 이름에 타입을 넣을 필요가 없다.
3. 인터페이스와 구현 클래스
- ShapeFactory, ShapeFactoryImpl
- 내가 사용하는 클래스가 인터페이스라는 사실을 남에게 알리지 않는 것이 좋다.
4. 한 개념에 한 단어를 사용해라.
- 비슷한 의미의 메서드를 클래스마다 다르게 사용할 경우 나중에 기억하기 어렵다. (Fetch, retrieve, get)
5. 함수 이름으로 해당 함수가 어떤 동작을 하는지 알아채기 어렵다면, 함수를 쪼개어 가독성 높은 코드를 만들어라.
3장 함수
1. 함수를 만드는 첫번째 규칙은 작게!, 두번째 규칙도 작게! 이다.
- 함수는 20줄도 길다. 4줄 이내의 함수가 답이다.
2. 조건문에 들어가는 블록은 한 줄이어야 한다.
// 조건문 블록에 여러 줄일 경우
if (pms != null ||
vaginalDischarge != null ||
spotting != null ||
memo != null) {}
// 조건문 블록에 한 줄인 경우
if (checkValidQuestionQuestion()) {}
// 함수화
fun checkValidQuestionQuestion(): Boolean {
return pms != null || vaginalDischarge != null || spotting != null || memo != null
}
3. 함수는 한가지 작업만 해야한다.
- 한가지 작업만 하는지 어떻게 알 수 있는가?
- 함수 내부 코드를 미있는 이름을 가진 다른 함수로 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다.
4. 함수 내에 모든 문장의 추상화 수준이 동일해야 한다.
5. 서술적인 이름을 사용하라. 길고 서술적인 이름은 길고 서술적인 주석보다 좋다.
6. 함수의 인수
- 이상적인 인수의 개수는 0개이다. 최대한 3개 이상의 인수는 피하는 것이 좋다.
6-2. flag 인수는 최악이다.
- 함수로 boolean 값을 넘기는 일은 정말로 끔찍하다.
- render(isSuite: boolean) 함수는 renderForSuite() 과 renderForSingleTest() 로 나뉘어야 한다.
6-3. 단항 함수는 함수이름과 인수이름이 동사/명사 상을 이뤄야 한다.
- fun open(file: String)
7. 함수 내부에서 명령과 조회는 분리한다.
- 함수는 객체 상태를 변경하는 '명령'하거나 객체 정보를 반환하는 '조회' 하는 일 둘 중 하나만 해야한다.
8. 중복은 모든 소프트웨어에서 악의 근원이다.
4장 주석
- 주석은 기껏해야 필요악이다.
- 주석으로 코드의 의도를 표현하지 마라. 차라리 함수 이름을 수정해라.
* 좋은 주석
- 저작권에 관련된 주석
- 기본적인 정보를 제공하는 주석 (하지만 가능하면 함수 이름에 정보를 담아라.)
- 의미를 명료히 밝히는 주석 (하지만 옳지않은 주석을 달 위험이 있고, 주석이 옳은지 검중하기 쉽지 않다.)
- 결과를 경고하는 주석
- TODO 주석 (하지만 나쁜 코드를 남겨둘 수 밖에 없는 핑계가 되어서는 안된다.)
* 나쁜 주석
- 쓸데없이 주절거리는 주석
- 같은 이야기를 또 하는 주석 (코드 내용을 그대로 설명한다던지)
- 의무적으로 다는 주석
- 있으나마나 한 주석
- 주석으로 처리한 코드 (우리에겐 git 이 있다.)
* 코드는 업데이트 되어도 주석은 업데이트 되지 않는다. 주석을 매번 업데이트 할 수 있는게 아니라면 신중히 달자.
5장 형식 맞추기
- 오늘 구현한 코드의 가독성은 앞으로의 코드 품질에 지대한 영향을 미친다.
1. 파일의 길이는 얼마가 적당할까?
- 좋은 코드는 500줄을 넘지 않고, 대부분 200줄 정도로도 시스템을 구축할 수 있다.
- 또한, 작은 파일이 이해하기 쉽다.
2. 개념은 줄 바꿈으로 분리한다.
- 줄 바꿈은 새로운 개념을 시작한다는 시각적 단서이다.
- 줄 바꿈을 삭제하면 코드 가독성이 현저하게 떨어져 암호처럼 보인다.
3. 세로 밀집도와 수직거리
- 밀접한 코드는 세로로 가까이 놓아야 한다.
* 세로 순서
- 함수 호출의 종속성은 아래 방향으로 유지한다. 먼저 호출되는 함수를 위에, 나중에 호출되는 함수를 아래에 놓는다.
- 중요한 개념을 가장 먼저 표현한다.
4. 팀 규칙
- 개개인이 따로국밥처럼 맘대로 짜는 코드는 피해야 한다.