[클린코드 스터디]20241226

CosmoNumb·2024년 12월 26일

클린코드 스터디

목록 보기
2/2

클린코드 3장 (함수)


1. 함수는 작게, 더 작게

  • 함수는 작아야 한다.
    • 한 눈에 들어올 정도로 짧아야 함.
    • 5~20줄 정도가 이상적임.
  • 함수는 한 가지 일을 해야 한다.
    • 한 가지 작업만 수행하고, 그것을 해야 함.
    • 여러 작업이 섞이면 읽기 어렵고 유지보수가 힘들어짐.

2. 함수는 한 단계의 추상화만 수행

  • 함수 내부의 모든 문장은 동일한 추상화 수준을 가져야 함.
    • 상위 수준의 추상화와 하위 수준의 구현이 섞이면 읽기 어렵고 수정이 어려워짐.
  • 추상화가 섞이면 새로운 함수로 추출해야 함.

3. 함수의 이름은 명확하고 직관적으로

  • 함수 이름은 동사나 동사구로 작성해야 함.
    • 예: getUser(), calculateTax(), validatePassword()
  • 이름만으로 함수가 어떤 일을 하는지 알 수 있도록 작성해야 함.
    • 나쁜 예: process(), doTask()
    • 좋은 예: sendEmailToUser()

4. 함수는 적은 수의 인수를 가져야 함

  • 최대 3개 이하의 인자가 이상적임.
    • 0~2개가 가장 좋음.
    • 3개 이상이면 파라미터 객체로 묶어서 전달.
    • 예: createOrder(String userId, String itemId, int quantity) 대신
      createOrder(OrderRequest request) 형태로 단순화 가능.

5. 부수 효과(side effect)를 피하라

  • 함수는 입력값을 받아서 출력값을 반환하는 순수 함수 형태가 이상적임.
  • 전역 변수 수정, 객체 상태 변경 등 숨겨진 부수 효과가 있으면 함수의 동작을 예측하기 어려워짐.

6. 명령-질의 분리(Command-Query Separation)

  • 질의 함수: 값을 반환하지만 상태를 변경하지 않음.
    • 예: isUserActive(), getBalance()
  • 명령 함수: 상태를 변경하지만 값을 반환하지 않음.
    • 예: disableUser(), updateProfile()
  • 명령과 질의를 섞지 말라.
    • 예: checkAndDeleteUser() → 삭제는 명령이고, 확인은 질의이므로 분리해야 함.

7. 오류 처리도 한 가지 일처럼 보이게 하라

  • try-catch 문은 함수에서 분리해야 함.
  • 오류 처리 자체를 별도 함수로 작성해 가독성을 높임.
    try {
        deleteFile(filename);
    } catch (Exception e) {
        logError(e);
    }
    ➡️ deleteFileSafely(filename) 형태로 추출 가능.

8. 함수는 읽기 쉽고 이해하기 쉬워야 한다

  • 코드의 흐름이 위에서 아래로 자연스럽게 읽히도록 작성해야 함.
  • 함수 호출 순서가 논리적인 흐름을 따르도록 작성하는 것이 중요함.

정리

  • 작은 함수, 명확한 이름, 부수 효과 없는 순수 함수가 좋은 코드의 핵심이다.
  • 함수를 작게 쪼개고, 명확한 책임을 가지도록 설계하는 것이 클린 코드의 핵심 철학이다.

0개의 댓글