Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
TIL 3장. 함수
#clean_code
3년 전
555


TIL (Today I Learned)

2022.02.23

오늘 읽은 범위

3장. 함수

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

  • 함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다. (p42)

  • 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. (p44)

  • 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다. (p49)

  • 최선은 입력 인수가 없는 경우이며, 차선은 입력 인수가 1개뿐인 경우다. (p51)

  • 함수에 인수 1개를 넘기는 이유로 가장 흔한 경우는 두 가지다.

    하나는 인수에 질문을 던지는 경우다. boolean fileExists("MyFile")이 좋은 예다.

    다른 하나는 인수를 뭔가로 변환해 결과를 반환하는 경우다. InputStream fileOpen("MyFile")은 String 형의 파일 이름을 InputStream으로 변환한다. (p51)

  • 플래그 인수는 추하다. 함수로 부울 값을 넘기는 관례는 정말로 끔찍하다.

    왜냐고? 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 셈이니까! (p52)

  • 이항 함수가 무조건 나쁘다는 소리는 아니다.

    하지만 그만큼 위험이 따른다는 사실을 이해하고 가능하면 단항 함수로 바꾸도록 애써야 한다.

    예를 들어, writeField 메서드를 outputStream 클래스 구성원으로 만들어 outputStream.writeField(name)으로 호출한다. (p52)

  • 인수가 2-3개 필요하다면 일부를 독자적인 클래스 변수로 선언할 가능성을 짚어본다. (p53)

  • 부수 효과는 거짓말이다. 함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른짓도 하니까.

    때로는 예상치 못하게 클래스 변수를 수정한다.

    때로는 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.

    많은 경우 시간적인 결합이나 순서 종속성을 초래한다. (p55)

  • 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 둘 다 하면 안 된다.

    객체 상태를 변경하거나 아니면 객체 정보를 반환하거나 둘 중 하나다.

    둘 다 하면 혼란을 초래한다. (p56)

  • 오류 코드보다 예외를 사용하라! (p57)

  • 오류 처리도 한 가지 작업이다. (p59)

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

  • 플래그 인수는 추하다. 추하다. 추하다..... 이번 장에서 가장 머리가 띵 해지는 문장이었다.

    플래그 값에 따라 show/hidden 혹은 enable/disable 하는 함수들을 많이 작성했었다.

    하긴 나도 작성하면서 함수명은 enableXXX로 만들어 놓고 false를 받으면 disable 시키고 있으니 내심 꺼림직했던 것도 사실이다. 코드 중복을 줄여서 실용적인게 아니라 추했던 것이었다.

  • 인수가 없는 함수는 중요한 함수가 아니라고 생각했었다. 어쩌다 불가피하게 필요해서 만들어진 함수라고 생각했었다. 인수를 줄여가는 노력을 해야겠다.

  • 입력 인수로 String값을 두 개 받는 함수때문에 에러가 나서 수정한 적이 있다. 그리고 몇일 뒤 같은 함수때문에 에러를 또 발생시켰다. 그 아이는 클래스를 인수로 받는 것이 나을 것 같다.

  • 오류 처리를 함수로 만든다면 가독성이 많이 좋아지겠다.

궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.

  • 목록 3-5 Switch 수정 함수의 이점이 와닿지가 않는다.

  • 추상화 수준이라는게 뭐지

  • 부수 효과로 발생하는 시간적인 결합이나 순서 종속성의 예는 뭘까

  • 출력 인수랑 return이랑 다른건가 this는 또 왜 나온거지