노개북(노마드코더 Challenges)-클린코드 DAY4

mingki·2022년 4월 26일
0

3장. 함수

❤️ 함수를 만드는 규칙

  1. 작게 만들어라 : 함수는 짧고 명백해야 한다
  2. 블록과 들여쓰기 : if문,else문,while문에 들어가는 블록은 한 줄 이어야 한다 -> 바깥을 감싸는 함수가 작아질 뿐 아니라 블록 안에서 호출하는 함수 이름을 적절히 짓는다면 코드를 이해하기도 쉬워진다
  3. 한 가지만 해라 : 하나의 함수는 한 가지만 처리한다
  4. 함수 당 추상화 수준은 하나로 : 함수가 확실하게 한 가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다
  5. 위에서 아래로 코드 읽기(내려가기 규칙) : 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다 -> 위에서 아래로 읽어내려 가듯이 코드를 구현하면 추상화 수준을 일관되게 유지하기가 쉬워진다
  6. Switch문 : Switch문은 작게 만들기 힘들다 본질적으로 N가지를 처리하기 때문이다 하지만 각 switch문을 다형성을 이용해 저차원 클래스에 숨기고 절대로 반복하지 않는 방법은 있다
  7. 서술적인 이름을 사용하라 : 함수의 이름을 서술적인 이름을 사용하면 함수가 하는 일을 좀 더 잘 표현하므로 훨씬 좋은 이름이다, 짧고 어려운 이름보다 길고 서술적인 이름이 좋다 -> 이름을 붙일 때는 일관성이 있어야 한다, 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용한다
  8. 함수 인수 : 이상적인 인수 개수는 0개(무항)다, 인수가 3개를 넘어가면 인수마다 유효한 값으로 모든 조합을 구성해 테스트하기가 부담스러워진다
    • 플래그 인수 : 함수로 Boolean값을 넘기는 관계는 좋지않다 -> 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 말하는 셈이다
    • 인수 객체 : 인수가 2~3개 필요하다면 일부를 독자적인 클래스 변수로 선언할 가능성을 짚어봐야한다
    • 동사와 키워드 : 단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야한다, 함수 이름에 키워드를 추가하면 인수 순서를 기억할 필요가 없어진다
  9. 부수 ‼️ 일으키지 마라 : 겉으로 드러나있지 않은 부수효과를 일으킨다면 시간적인 결합을 초래한다
  10. 명령과 조회를 분리하라 : 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야한다
  11. 오류 코드보다 예외를 사용하라 : 오류 코드 대신 예외를 사용하면 오류처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다
    • Try/Catch 블록은 코드 구조에 혼란을 일으키며 정상 동작과 오류 처리 동작을 뒤섞으므로 사용하지 않는것이 좋다
    • 오류 처리도 한 가지 작업이다 : 오류를 처리하는 함수는 오류만 처리해야 마땅하다
  12. 반복하지 마라 : 중복은 소프트웨어에서 모든 악의 근원이다
  13. 구조적 프로그래밍 : 모든 함수와 함수 내 모든 블록에는 입구와 출구가 하나만 존재해야 한다 -> 함수는 return 문이 하나여야 한다 루프 안에서 break나 continue를 사용해서는 안 되며 goto는 절대로 안된다 But 함수를 작게 만든다면 간혹 return,break,continue를 여러 차례 사용해도 괜찮다

‼️ 나의 생각

책에서 나쁜코드의 예로 보여준 코드가 내가 작성한 코드와 비슷해서 민망했다
"하나의 함수는 하나의 기능만" 이라는 정의가 실무에 적용하기가 너무 힘들다
그나마 수정하기 쉬운곳 부터 하나씩 고쳐나가봐야 겠다

profile
비전공초보개발자

0개의 댓글