클린코드

[DAY 6] 클린 코드 TIL - 3장. 함수

lado 2022. 1. 27. 23:21

TIL (2022.01.27)

DAY 6

🔖 오늘 읽은 범위 : 3장, 함수 (p.55 ~ p.65)


😀 책에서 기억하고 싶은 내용

  • 사이드 이펙트를 일으키지는 않는지 확인해라

    • 많은 경우 시간적인 결합(예를 들면, 특정 상황에서만 호출이 가능한 경우가 생긴다든지)이나 순서 종속성을 초래한다.

    • 시간적인 결합이 필요하다면 함수 이름에 분명히 명시한다.

  • 출력 인수는 피해야 한다.

    • 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는 방식을 택한다.
  • 명령과 조회를 분리하라

    • 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 둘 다 하면 안 된다. 객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다.
  • 명령 함수에서 오류 코드를 반환하는 방식은 명령/조회 분리 규칙을 위반한다. 그러니 오류 코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.

  • try/catch 블록을 별도 함수로 뽑아내라.

    • 정상 동작과 오류 처리 동작을 분리하면 코드를 이해하고 수정하기 쉬워진다.
  • 오류를 처리하는 함수는 오류만 처리해야 마땅하다.

  • 오류 코드 대신 예외를 사용하면 새 예외는 Exception 클래스에서 파생된다. 따라서 재컴파일/재배치 없이도 새 예외 클래스를 추가할 수 있다.

  • 많은 원칙과 기법이 중복을 없애거나 제어할 목적으로 나왔다.

  • 객체 지향 프로그래밍은 코드를 부모 클래스로 몰아 중복을 없앤다.

  • 소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다.

    • 프로그래밍의 기술은 언제나 언어 설계의 기술이다.
  • 먼저 길고 복잡한 함수를 짠다. 그리고 나서 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다. 메서드를 줄이고 순서를 바꾼다. 전체 클래스를 쪼개기도 한다. 이 와중에도 코드는 항상 단위 테스트를 통과한다.

  • 모든 시스템은 특정 응용 분야 시스템을 기술할 목적으로 프로그래머가 설계한 도메인 특화 언어로 만들어진다. 함수는 그 언어에서 동사며, 클래스는 명사다.

  • 대가 프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다.


🤔 오늘 읽은 소감은?

  • 프로그래밍의 기술은 언제나 언어 설계의 기술이고, 시스템을 풀어갈 이야기로 여기라는 말이 인상 깊다.
  • 퇴고를 하는 마음으로 코드를 다듬고, 함수를 만들고, 이름을 바꾸고, 중복을 제거하고, 메서드를 줄이고, 순서를 바꿔야겠다.
  • 글을 쓸 때도 처음부터 논리적으로 완벽한 글을 쓸 수는 없다. 글 모이를 모으고 얼기설기 엮은 다음에 여러 번 읽어서 최선의 문장을 만들어낸다. 글을 쓰는 것처럼, 처음부터 깔끔한 코드를 짜는 건 어려운 일이고, 언제든 고쳐나가야 한다는 마음으로 코드 작성을 시작해야겠다.

🧐 궁금한 내용이 있거나, 잘 이해되지 않는 내용

  • 오류 코드 대신 예외를 사용하면 새 예외는 Exception 클래스에서 파생된다는 이야기가 잘 이해가 안됐는데, 자바 언어의 특징과 관련이 있는 내용인 것 같다.