3장 : 함수

Y·2023년 8월 19일
0

클린 코드

목록 보기
3/14

*<클린 코드>를 참고하여 작성한 글입니다.

함수

  • 작게 만들 것
    • 각 함수가 명백하도록, 이야기 하나를 표현하도록.
    • 중첩 구조가 생길만큼 함수가 커져서는 안 된다.
  • 한 가지만 할 것
    • 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
    • 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다.
    • 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다.
  • 함수 당 추상화 수준은 하나로
    • 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야한다.
    • 내려가기 규칙 : 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다.
  • 서술적인 이름을 사용하라
    • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.
    • 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다. 함수 이름을 정할 때는 여러 단어가 쉽게 읽히는 명명법을 사용한다. 그런 다음, 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택한다.
    • 이름을 붙일 때는 일관성이 있어야 한다. 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다.
  • 함수 인수
    • 인수는 적을 수록 좋다
    • StringBuffer transform(StringBuffer in)이 void transform(StringBuffer out)보다 좋다.
    • 인수가 2-3개 필요하다면 일부를 독자적 클래스 변수로 선언할 가능성을 짚어본다.
    • 함수의 의도나 인수의 순서, 의도를 제대로 표현하려면 좋은 함수 이름이 필수다.
    • 출력 인수는 피해야 한다. 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다.
  • 부수 효과를 일으키지 말 것
  • 명령과 조회를 분리할 것
    • 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야한다. 객체 상태를 변경하거나 객체 정보를 반환하거나 둘 중 하나다.
  • 오류 코드보다 예외를 사용할 것
    • 오류 처리도 한 가지 작업만 해야 한다.
    • 오류 코드 대신 예외를 사용하면 새 예외는 Exception 클래스에서 파생되므로, 재컴파일/재배치 없이도 새 예외 클래스를 추가할 수 있다.
  • 반복하지 마라
    • 중복은 소프트웨어에서 모든 악의 근원이다.
  • 함수를 짜는 법
    • 처음에는 길고 복잡하지만, 다듬고, 함수를 만들고, 이름을 바꾸꼬, 중복을 제거한 후 메서드를 줄이고 순서를 바꾼다. 그 와중에도 코드는 항상 단위 테스트를 통과한다.
  • 결론
    • 프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다. 프로그래밍 언어라는 수단을 사용해 좀 더 풍부하고 좀 더 표현력이 강한 언어를 만들어 이야기를 풀어간다. 시스템에서 발생하는 모든 동작을 설명하는 함수 계층이 바로 그 언어에 속한다. 재귀라는 기교로 각 동작은 바로 그 도메인에 특화된 언어를 사용해 자신만의 이야기를 풀어간다.
    • 진짜 목표는 시스템이라는 이야기를 풀어가는 데 있다. 프로그래머가 작성하는 함수가 분명하고 정확한 언어로 깔끔하게 같이 맞아떨어져야 이야기를 풀어가기가 쉬워진다.
profile
개발자, 학생

0개의 댓글