독서일지/클린 코드

클린 코드 독서일지 - Day 5

Sadie Kim 2023. 10. 29. 23:54

두 번째 장 : 함수

내려가기 규칙

코드는 위에서 아래로 이야기처럼 읽혀야 좋다.
=> 뒤로 갈수록 추상화 수준이 낮은 함수가 오도록 한다.(앞에서 쓴 함수를 뒤에서 설명하도록)

switch 문

다형성을 이용해 switch문을 저차원 클래스에 숨기고 같은 구조를 반복하지 않게 할 수 있다.

서술적인 이름 사용하기

이름이 길어도 괜찮으니 함수가 하는 일을 잘 설명하는 좋은 이름을 지어 주자.
이름을 지을 때는 일관성 있는 단어를 사용한다.

함수 인수

인수는 적을수록 좋다. 3항 이상의 인수는 피하는 편이 좋다.
출력 인수는 지양한다.
입력 인수가 아예 없거나, 1개뿐인 경우가 바람직하다.

많이 쓰는 단항 형식

  • 인수에 질문을 던지는 경우(ex: boolean fileExists(“MyFile”))
  • 인수를 뭔가로 변환해 결과를 반환하는 경우
  • 이벤트 - 입력 인수로 시스템 상태를 바꾸는 경우
    이 경우들이 아니라면 단항 함수는 가급적 피한다.
    -> 특히, 출력 인수를 사용하지 않는다.
    StringBuffer transform(StringBuffer in)이 void transform(StringBuffer out)보다 좋다.

플래그 인수

사용하지 않도록 한다.

이항 함수

가능하면 단항 함수로 바꾸도록 한다.

  • 이항 함수는 단항 함수보다 이해하기 어렵다.
  • 알맞은 항의 순서를 헷갈리기 쉽다.

삼항 함수

이항 함수보다 훨씬 이해하기 어려우므로, 신중히 고려한다.

인수 객체

인수가 2~3개 필요하다면 일부를 독자적인 클래스 변수로 만들어서 넘기는 방법을 고려해 보자.
ex)

Circle makeCircle(double x, double y, double radius);
//위를 아래처럼 바꾼다.
Circle makeCircle(Point center, double radius);

객체를 생성해 인수를 넘기면 이름을 붙이게 되므로 가독성이 좋아진다.

동사와 키워드

단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다.
ex) writeField(name)

부수 효과를 일으키지 마라

함수에서는 한 가지 일만 해야 한다.
만약 다른 기능과의 결합이 필수적이라면, 함수 이름에 분명히 명시하여 혼란이 없도록 한다.

출력 인수

일반적으로 출력 인수(인수를 수정하여 return하게끔 하는 구현)는 피해야 한다.
객체 지향 프로그래밍에서는 출력 인수 대신 함수를 객체 내의 메소드로 만들어 객체 상태를 변경하는 방식을 사용하라.