함수를 어떻게 만들어야 처음보는 사람이 쉽게 이해할까 ?

  1. 작게 만들어라.

    • 최대한 작게만들어서 그 함수가 무슨 역할을 하는지 알수 있게 만든다.
  2. 함수는 한가지 일만 해야한다.

    • 그래야 명확하게 그 함수가 무슨역할인지 알수 있으니까.
    • 한가지 일은 추상화 수준이 하나인 단계
      • 같은 추상화 단계에서 일하는 것들이 모여있으면 이것은 한가지일만 하는것
      • 추상화 수준이란 무엇일까 ?
        • nested하게 내려가거나 올라가지 않고 같은 레이어에서 작동하는것.
      • 함수당 추상화 수준은 하나로 하자.
  3. 코드는 소설책같은것들 처럼 위에서 아래로 읽혔을때 잘 읽혀야 한다.

  • 내려가기 규칙
  • 아래로 내려갈수록 추상화 단계가 한단계 씩 낮은 함수가 온다.
  • 아래로 갈수록 상위 함수에서 나온 함수를 설명하는 느낌으로 간다.
    • 예를 들어 상위 함수에서 쓴 함수를 하위에 바로 붙여서 쓰는식으로.
  1. Switch 문
  • 추상 팩토리 ( abstract factory ) 에 숨겨서 사용한다.
  • 예제를 좀더 봐야겠다. 어렵다.
  1. 서술적인 이름을 사용하라!
  • 이름이 길어도 된다.
  • 작은기능을 가진 함수는 이름짓기도 쉽다.
  • 일관성 있게 이름을 지어라.
  • include블라블라
  1. 함수 인수
  • 이상적인 인수는 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)이 더 좋다.
    • 그러면 인수 순서를 기억할 필요가 없어진다.
  1. 부수효과를 일으키지 마라.
  • 함수에서 하나의 기능만 사용한다고 약속하고서 남몰래 다른짓을 하지말자.

  • 때로는 예상치 못하게 클래스 변수를 수정한다.

  • 떄로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.

  • 어느쪽이든 교활하고 해로운짓이다.

  • 예제를 보면 이해하기가 쉽다.

  • 일반적으로 출력 인수를 피해야 한다.

  • 함수가 상태를 변경해야 한다면 웬만하면 함수가 속한 객체에서 변경시키자

  • 예제를 보면 이해하기가 쉽다.

  1. 명령과 조회를 분리하라
  • 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘중 하나만 해야 한다.
  • 둘다하면 안된다.
  • 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘중 하나다.
  1. 오류 코드보다 예외를 사용하라
  • 명령 함수에서 오류코드를 반환하는 방식은 명령 조회 분리 규칙을 미묘하게 위반한다.

  • 오류코드를 반환하면 호출자는 오류코드를 곧바로 처리해야되는 문제에 부딪힌다.

    • Try/Catch 블록 뽑아내기
    • try/catch 블록도 별도의 함수로 뽑아내는 편이 좋다.
  • 오류 처리도 한가지 작업이다.

  • 함수는 한가지 작업만 해야한다. 결국 오류처리도 한가지 작업에 속한다.

  • try가 있다면 try로 시작해 catch finally문으로 끝내야 된다는 말이다.

  • Errorjava 의존성 자석

  • 오류 코드를 반환한다는 이야기는 클래스든 열거형 변수든 어디선가 오류 코드를 정의한다는 뜻이다.

  • 그래서 오류코드대신 익셉션을 반환해라.

  1. 반복하지마라
  • 중복 없애라
  • 반복 하지마라
  1. 구조적 프로그래밍
  • 모든 함수와 모든 함수내 블록에는 입구와 출구가 하나씩만 존재해야된다.
  • 즉 함수는 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

+ Recent posts