본문 바로가기

도서/Clean Code

[Clean Code/클린 코드] 3장 함수

3장 함수

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

 

 

목차

     


    🗒️ 책에서 기억하고 싶은 내용

    Switch문

    public Money calculatePay(Employee e) throws InvalidEmployeeType {
      switch (e.type) {
        case COMMISSIONED:
          return calculateCommissionedPay(e);
        case HOURLY:
          reutrn calculateHourlyPay(e);
        case SALARIED:
          return calculateSalariedPay(e);
        default:
        throw new InvalidEmployeeType(e.type);
      }
    }

    위 함수에는 몇 가지 문제가 있다.

    • 함수가 길다.
    • '한 가지' 작업만 수행하지 않는다.
    • SRP를 위반한다.
    • OCP를 위반한다.
    • 동일한 함수가 무한정 존재한다.

    함수 인수

      이상적인 인수 개수는 0개(무항)다.
      변환 함수에서 출력 함수를 사용하면 혼란을 일으킨다.
      플래그 함수
      한꺼번에 여러 가지를 처리하지 말자
      이항 함수
      불가피한 경우를 제외하고는 단항 함수로 수정할 것

    출력 인수

    public void appendFooter(StringBuffer report)

    객체 지향 언어에서는 출력 인수를 사용할 필요가 거의 없다.
    출력 인수로 사용하라고 설계한 변수가 바로 this이기 때문이다.


    다시 말해, appendFooter는 다음과 같이 호출하는 방식이 좋다.

     

    report.appendFooter()

    Try/Catch 블록 뽑아내기

    public void delete(Page page) {
      try {
        deletePageAndAllReferences(page);
      }
      catch (Exception e) {
        logError(e);
      }
    }

    작게 만들어라!

    서술적인 이름을 사용하라!

    반복하지 마라!

     

    🗒️ 소감

    함수 인수는 적게 사용하는 것이 좋다는 걸 깨닫게 되었다.

    이때까지 다항 함수를 여러 개 만들면서도 깊 생각해본 적이 없었는데, 가능하다면 단항 함수를 작성하도록 노력해야겠다.
    그리고 try/Catch 블록을 별도 함수로 뽑아내서 사용한다는 것도 알게 되었다.

    아직은 코드가 술술 읽히지 않지만, 많은 코드를 접해보고 좋은 코드를 구분할 수 있는 능력을 길러야겠다고 생각을 했다.

     

    🗒️ 궁금하거나 어려웠던 내용

    Switch문을 설명하는 부분에서 리팩토링된 코드를 이해하기가 어려웠다.