티스토리 뷰

읽은 책

클린코드 TIL (3장)

숨_쉬듯 2022. 4. 27. 23:00

TIL (Today I Learned) 날짜

2022.04.27 (수)

오늘 읽은 범위 

3장 함수

책에서 기억하고 싶은 내용을 써보세요.

  • 함수는 작을수록 더 좋다.
    • 중첩 구조가 생길 만큼 함수가 커져서는 안 된다.
    • 함수에서 들여 쓰기 수준을 1단이나 2단을 유지해야 함수 읽고 이해하기가 쉬어진다.
  • 함수는 한 가지만 해야 한다.
    • 추상화하는 이유
      • 큰 개념(함수 이름)을 다음 추상화 수준에서 여러 단계로 나눠 수행하기 위한 목적
    • 함수가 ‘한 가지’만 하는지 판단하는 방법
      • 의미 있는 이름을 가진 다른 함수를 추출할 수 있는가? 그렇다면 함수가 여러 작업을 하고 있다는 뜻이다.
  • 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
    • 추상화 수준을 섞으면 코드를 읽는 사람은 이게 근본 개념인지 세부사항인지 구분하기 어려워진다. 이렇게 함수를 파악하기 어려워질수록 함수에 세부사항을 추가할 확률이 높아진다.
  • 코드는 위 에서 아래로 이야기처럼 읽혀야 좋다.
    • 내려가기 규칙 : 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 와야 한다.
  • Switch문은 본질적으로 N가지를 처리한다. (한 가지 일만 한다는 함수 규칙과 위배됨)
    • 사용해야 한다면 아무에게도 보여주지 않도록 추상 팩토리에 꽁꽁 숨기기
  • SRP (Single Responsibility Principle)
    • 하나의 책임만 가지며, 그 책임을 완전히 캡슐화해야 한다는 프로그래밍 원칙
    • 한 클래스에 하나의 책임을 부여해야(하나의 관심사에만 집중해야) 클래스가 더욱 튼튼해질 수 있다.
  • OCP (Open Closed Principle) : 확장은 가능하지만 수정에 대해서는 닫혀 있어야 한다는 프로그래밍 원칙
    • OCP가 잘 적용된 코드는 기능을 추가하거나 변경해야 할 때 그 코드와 연결된 다른 코드를 모두 고칠 필요 없이 기존 코드에 새로운 코드만 추가하면 된다.
  • 코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 된다.
  • 서술적인 이름을 사용하라.
    • 이름을 정하느라 시간을 들여도 괜찮다. 이런저런 이름을 넣어 코드를 읽어보면 더 좋다.
  • 모듈 내 함수 이름은 같은 문구, 명사, 동사를 사용한다.
  • 가장 이상적인 함수 인수는 0개이다.
    • 불가피한 경우를 제외하고는 되도록 단항 함수 쓰자.
    • 최대 2개까지는 OK, 3개는 피하자
    • 인수가 많아질수록 모든 조합을 구성해 테스트하기가 부담스러워진다.
  • 플래그 인수는 추하다.
    • boolean 값을 넘긴다는 건 함수가 한꺼번에 어려 가지를 처리한다고 대놓고 공표한다는 의미다.
  • 함수와 인수는 동사와 명사 쌍으로 이루는 게 좋다.
    • 동사/명사 쌍 예시
      • write(name)
    • 더 나은 이름 예시 
      •  writeField(name)
  • 부수 효과를 일으키지 마라!
    • 함수 이름에 담긴 동작만 해야 한다. 만약 함수 내부에 다른 동작을 담고 있다면 이름에 반드시 담겨 있어야 한다.
  • 함수 선언부를 찾아보는 행위는 코드를 보다가 주춤하는 행위와 동급이다.
  • 함수에서 상태를 변경해야 한다면 함수가 속한 객체 상태를 변경하는게 좋다.
  • 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다.
    • 조회 아니면 명령, 하나만 하기
  • 오류 코드보다 예외를 사용하라.
    • 오류를 반환하면 오류 코드를 곧바로 처리해야 하는게 문제다.
    • try/catch로 예외처리를 하면 코드가 훨씬 더 깔끔해진다.
    • try/catch 블록도 별도 함수로 뽑아내면 가독성이 더 좋아진다.
  • 함수처럼 오류 처리도 한 가지 작업만 해야 한다.
  • 반복하지 마라! 중복을 없애라!
    • 중복이 생길수록 오류 발생할 확률이 높아진다.
  • 함수 잘 짜는 방법
    • 글쓰기와 동일하다.
    • 생각을 기록한 후 읽기 좋게 다듬는 글쓰기처럼 코드도 처음엔 길고 복잡하게 작성하고 다듬고, 중복을 제거하고, 메서를 줄이고, 순서를 바꾸다 보면 규칙을 따르는 함수를 얻을 수 있다. 처음부터 탁월하게 짜내지 않는다.
  • 대가 프로그래머는 시스템을 (구현할) 프로그래밍이 아니라 (풀어갈) 이야기로 여긴다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

  • 함수는 짧으면서도 한 가지만 해야한다. 함수에게 너무 많은 일을 시키지 말자.
  • 회사 코드에 있는 플래그 인수를 가진 함수가 떠오른다. 배운 내용을 토대로 개선해봐야겠다.

더 알아보고 싶은 내용 적어보세요.

  • 추상화 수준
  • 다형성

참고

OCP

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함