함수를 어떻게 만들어야 처음보는 사람이 쉽게 이해할까 ?
-
작게 만들어라.
- 최대한 작게만들어서 그 함수가 무슨 역할을 하는지 알수 있게 만든다.
-
함수는 한가지 일만 해야한다.
- 그래야 명확하게 그 함수가 무슨역할인지 알수 있으니까.
- 한가지 일은 추상화 수준이 하나인 단계
- 같은 추상화 단계에서 일하는 것들이 모여있으면 이것은 한가지일만 하는것
- 추상화 수준이란 무엇일까 ?
- nested하게 내려가거나 올라가지 않고 같은 레이어에서 작동하는것.
- 함수당 추상화 수준은 하나로 하자.
-
코드는 소설책같은것들 처럼 위에서 아래로 읽혔을때 잘 읽혀야 한다.
- 내려가기 규칙
- 아래로 내려갈수록 추상화 단계가 한단계 씩 낮은 함수가 온다.
- 아래로 갈수록 상위 함수에서 나온 함수를 설명하는 느낌으로 간다.
- 예를 들어 상위 함수에서 쓴 함수를 하위에 바로 붙여서 쓰는식으로.
- Switch 문
- 추상 팩토리 ( abstract factory ) 에 숨겨서 사용한다.
- 예제를 좀더 봐야겠다. 어렵다.
- 서술적인 이름을 사용하라!
- 이름이 길어도 된다.
- 작은기능을 가진 함수는 이름짓기도 쉽다.
- 일관성 있게 이름을 지어라.
- include블라블라
- 함수 인수
-
이상적인 인수는 0개
- 그다음 1개, 그다음 2개
- 3개는 가능한 피하는 편이 좋다.
- 4개이상은 특별한 이유가 필요하다.
- 4개 이상은 이유가 있어도 거의 사용하면 안된다.
-
void일때 인수 받는건 가급적 피해라.
-
플래그인수 ( boolean 값과 비슷한 체크용 인수 ) 이거 될수있음 쓰지마라
-
인수 두개 받을때 될수있으면 writeField(outStream, name) 일 경우
-
writeField를 outStream에 합류시켜서
-
outStream.writeField(name) 으로 하나의 인수만 넣도록 하자.
-
삼항함수는 신중히 고려해서 하도록 하자.
-
인수가 2~3개일때 일부를 독자적인 class화 시켜서 class 변수로 선언하는 방법도 있다.
- 대신 인수가 연관관계나 비슷한 관계여야함.
- 그래야 줄였을경우 인수에 대한 개념을 표현할수 있으니까.
-
단항함수 일때 함수와 인수가 동사/명사 쌍을 이뤄야 한다.
- 이때 메소드 이름은 write(name) 보단 writeField(name) 를 사용해서
- name이 field라는 사실이 드러나게 한다.
-
그리고 함수이름에 키워드를 추가하는 형식도 있다.
-
즉 함수이름에 인수이름을 넣는다.
- assertEquals 보단 assertExpectedEqualsActual(expected, actual)이 더 좋다.
- 그러면 인수 순서를 기억할 필요가 없어진다.
- 부수효과를 일으키지 마라.
-
함수에서 하나의 기능만 사용한다고 약속하고서 남몰래 다른짓을 하지말자.
-
때로는 예상치 못하게 클래스 변수를 수정한다.
-
떄로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.
-
어느쪽이든 교활하고 해로운짓이다.
-
예제를 보면 이해하기가 쉽다.
-
일반적으로 출력 인수를 피해야 한다.
-
함수가 상태를 변경해야 한다면 웬만하면 함수가 속한 객체에서 변경시키자
-
예제를 보면 이해하기가 쉽다.
- 명령과 조회를 분리하라
- 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘중 하나만 해야 한다.
- 둘다하면 안된다.
- 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘중 하나다.
- 오류 코드보다 예외를 사용하라
-
명령 함수에서 오류코드를 반환하는 방식은 명령 조회 분리 규칙을 미묘하게 위반한다.
-
오류코드를 반환하면 호출자는 오류코드를 곧바로 처리해야되는 문제에 부딪힌다.
- Try/Catch 블록 뽑아내기
- try/catch 블록도 별도의 함수로 뽑아내는 편이 좋다.
-
오류 처리도 한가지 작업이다.
-
함수는 한가지 작업만 해야한다. 결국 오류처리도 한가지 작업에 속한다.
-
try가 있다면 try로 시작해 catch finally문으로 끝내야 된다는 말이다.
-
Errorjava 의존성 자석
-
오류 코드를 반환한다는 이야기는 클래스든 열거형 변수든 어디선가 오류 코드를 정의한다는 뜻이다.
-
그래서 오류코드대신 익셉션을 반환해라.
- 반복하지마라
- 중복 없애라
- 반복 하지마라
- 구조적 프로그래밍
- 모든 함수와 모든 함수내 블록에는 입구와 출구가 하나씩만 존재해야된다.
- 즉 함수는 return문이 하나여야 한다.
'book > 클린코드' 카테고리의 다른 글
7장 - 오류처리 (0) | 2020.11.27 |
---|---|
6장 - 객체와 자료구조 (0) | 2020.11.25 |
5장 - 형식 맞추기 (0) | 2020.11.23 |
4장 - 주석 (0) | 2020.11.22 |
2장 - 의미있는 이름들 (0) | 2020.11.17 |