본문 바로가기

클린 코드

클린 코드 function structure

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한다

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