클린코드 정복하기 2주차

wannte·2021년 1월 12일
0

Ch3. 함수

작게 만들어라 & 한 가지만 해라

'작게' 그리고 '더 작게!'
들여쓰기의 수준은 1단, 2단을 넘어서면 안된다.

함수는 한 가지를 해야 한다. 그 한가지를 잘 해야 한다. 그 한가지만 해야 한다.

'한 가지'만 하는지 판단하는 방법 : 추상화 수준이 하나인 단계만 수행하나? 의미 있는 이름을 다른 함수를 추출할 수 있나?

함수당 추상화 수준은 하나로

getHtml()  // 추상화 수준 높음
String pagePathName = PathParser.render(pagepath); // 추상화 수준 중간
.append("\n") // 추상화 수준 낮음

switch

switch문은 많은 문제점을 야기할 수 있으며, 최대한 피해야함.
함수 길이가 길며, 한 가지 작업만 수행하지 않으며, SRP를 위반하고(코드를 변경할 이유가 여럿), OCP를 위반(새 직원 유형을 추가할 가능성)한다.
가장 큰 문제는 동일한 형태의 함수가 무한정 존재할 수 있음.
employee의 유형에 따른 calculatePay함수가 있는데, 직원 유형에 따라 달라지는 모든 메소드들에 일일이 switch문을 사용해야함.
switch문을 추상 팩토리로 숨겨, switch문을 한번만 실행하게끔 한다.

함수 인수

  • 이상 적인 인수 개수 = 0개
  • 플래그 인수는 그 자체로 여러 가지 일을 하는 것임을 공표, 다른 두개의 함수로 구분
  • 인수 객체가 2~3개 필요하다면, 독자적인 클래스 변수로 표현( x,y->Point)
  • 인수 목록 (자료형...)
  • 다항 함수의 경우 인수의 순서를 인위적으로 기억해야함
  • write(name)보다 writeField(name)이 'name'이 'field'라는 사실이 분명히 드러남.
  • 출력 인수 사용을 피해야함. this를 사용하여 해결(report.appedFooter())

명령과 조회 분리

attributeExists 와 setAttribute로 분리

오류 코드보다 예외를 사용하라

예외를 사용했을 때, 코드가 여러 단계로 중첩
try/catch 블록을 별도의 함수로 뽑아내라(한 가지의 일이다)

Don't Repeat Yourself

중복 코드의 경우, 코드의 길이가 늘어나고 수정을 할 때 중복되는 모든 곳에서 수정 작업을 해줘야한다. 이를 부모 클래스로 몰아서 중복을 없앤다. -> 구조적 프로그래밍, AOP(Asepct Oriented Programming), COP(Component Oriented Programming)
AOP:프로그래머가 횡단 관심사를 애스펙트라는 독립적인 모듈로 표현할 수 있게 함으로써 문제를 해결
COP: 컴포넌트를 조립해서 하나의 새로운 응용 프로그램을 만드는 소프트웨어 개발방법론

Ch4. 주석

주석은 언제나 실패를 의미한다.
주석이 아닌 코드로 그 의도를 밝혀라

// 직원에게 복지 혜택을 받을 자격이 있는지 검사한다.
if ((employee.flags & HOURLY_FLAG) && (employee.age > 65))

if (employee.isEligibleForFullBenefits())

좋은 주석

  • 법적인 주석 (저작권 정보와 소유권)
  • 의도를 설명하는 주석, 의도를 명확하게 밝히는 주석
  • 결과를 경고하는 주석
  • TODO주석 ->IDE에서 별도 기능 제공
  • Javadocs

나쁜 주석

  • 코드와 같은 이야기를 중복하는 주석
  • 이력을 기록하는 주석, 저자 표시 주석 -> Git 을 이용해라
  • 함수나 변수로 표현할 수 있다면 주석을 달지 마라 (의도를 보여주기 위하여, 변수명을 활용)
profile
The Process

0개의 댓글