1. Arguments
- 인자가 많아지면 복잡도 증가
- 3개의 인자가 최대
- 외우기 어렵다
- start, end를 range로 추상화
- 생성자에 많은 수의 인자를 넘겨야 한다면
- 빌더 클래스에 required, optional 인자를 작성한다. 빌더의 생성자는 required 인자를 받아서 생성하고 나머지는 setter에서 생성한다.
- Boolean 인자 사용 금지
- true인 경우를 위한 일
- false인 경우를 위한 일
- 2개의 함수로 분리
- Innies not Outies
- 함수로 전달된 인자는 변경되어 return되면 안된다. 인자는 지역 변수로 받고 그 지역 변수를 변경해야 한다.
- the null defense
- null을 전달/기대하는 함수는
- boolean을 전달하는 만큼 잘못된 것
- null인 경우의 행위 + null이 아닌 경우의 행위
- 2개의 함수를 만드는 것이 맞다.
- null을 pseudo boolean처럼 쓰지 마라. null or not null (x)
- defensive programming 지양
- 코드를 null, 에러 체크로 더럽히지 마라.
- 잘못됐다는 단서(code smell)
- 팀원, 단위 테스트를 못 믿는다는 의미
- null 여부를 지속적으로 조사할 것이 아니라 단위 테스트에서 검증해야 함
- public api는 defensive하게 programming한다
- null을 전달/기대하는 함수는
2. The stepdown rule
- 모든 public은 위에, 모든 private은 아래에
- public part만 사용자들에게 전달하면 됨
3. switches and cases
- A->B (A가 B의 함수를 사용하는 경우) B가 변경되면 A에 영향을 미쳐 의존성이 생긴다. 런타임 의존성과 코드 의존성
- 객체 지향
- 런타임 의존성은 A가 B를 호출하는 것이기 때문에 어쩔 수 없음. 코드 의존성을 역전시킴
- A-> I <-B. A는 인터페이스를 호출
- 각 case 문장은 외부 모듈에 의존성을 갖는다.
- switch 문장 제거 절차
- switch 문장을 polymorphic interface 호출로 변환
- case에 있는 문장들을 별도의 클래스로 추출하여 변경 영향이 발생하지 않도록 한다.
출처 https://www.youtube.com/watch?v=JSV_YpTFhtw&list=PLuLb6MC4SOvXCRePHrb4e-EYadjZ9KHyH&index=5
'클린 코드' 카테고리의 다른 글
클린 코드 function structure 2 (0) | 2019.12.10 |
---|---|
클린 코드 function 2 (0) | 2019.12.10 |
클린 코드 function (0) | 2019.12.10 |
클린 코드 OOP 2 (0) | 2019.12.10 |
클린 코드 소개 및 OOP (0) | 2019.12.04 |