어제(월요일) 코로나 확진떳다...ㅋ 비몽사몽간에 겨우겨우 책 읽는 중
어떤 프로그램이든 가장 기본적인 단위가 함수다.
3장은 함수에 대한 이야기였다. 절차지향 프로그래밍 언어들이 서브루틴의 개념을 만든 이후 대부분의 프로그램들은 여러 함수 또는 메서드가 어느 시점에 실행되느냐를 조정해서 만들어지기 때문에 기능의 가장 작은 단위라고 볼 수 있을것 같다. 그렇기에 함수를 어떻게 만드느냐는 클린코드에서 빼먹을 수 없는 내용일 것이다.
오늘은 상태가 좋지않아 적당히 정리한다ㅠ
함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다.
이전 장에서 이미 작성한 코드를 다시 보는데 코딩하는 대부분의 시간을 사용한다는 내용이 있었던걸로 기억한다. 함수가 작으면 확인할 내용도 줄어드려나?
야구 명언중에 "느린 공, 더 느린 공, 가장 느린 공" 이야기가 있었는데.....사실 이거랑은 상관 없는 이야기
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다.
추상화 수준이라는 말이 계속 등장하게 되는데, 함수를 추출하고 추출하면서 유일한 작업 하나만 하게 만드는 과정에서 얼마나 추출하게 되느냐...? 정도로 찾아진다. 자세한건 나중에 찾아봐야겠다...
switch statementswitch는 그 특징상 한가지 일만 할 수는 없다.
switch 문을 저차원 클래스에 숨길 수 있다.코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다.
마찬가지로 별 상관은 없지만 Spring Data JPA에서 만드는 Query Method 들이 생각났다...
함수에서 이상적인 인수 개수는 0개다. 다음은 1개고, 다음은 2개다. 3개는 가능한 피하는 편이 좋다.
boolean fileExists("text.txt")boolean isDigit('a')int parseInt("123")long parseLong("123")return)하는 형태로 만들어라.마지막 예시에서 Java Servlet API가 떠올랐다. HttpServlet도 그렇고 Filter도 그렇고 request와 response를 인수로 전달하고 그걸 메서드 내부에서 조작하게 되는데......
객체를 생성해 인수를 줄이는 방법이 눈속임이라 여겨질지 모르지만 그렇지 않다.
점(Point)라는 객체를 만들면 해당 객체의 형 자체가 개념을 가지고 있기 때문에, 인수를 위한 객체를 만드는 것은 나쁘지 않은 행위이며, 이를 이용해 함수의 항의 갯수를 줄일 수 있다.
함수형 프로그래밍에서 이야기한 Pure Function 얘기가 떠올랐었다.
함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만해야 한다.
근데 이건 사실 Java로 만든 여러 메서드가 어기고 있는 특징 아닌가? 다음은 Java의 Collection 중 하나인 List의 add 메서드이다.

명령함수에서 오류 코드를 반환하는 방식은 명령/조회 분리 규칙을 미묘하게 위반한다.
작성하는 함수가 분명하고 정확한 언어로 깔끔하게 같이 맞아떨어져야 이야기를 풀어가기가 쉬워진다.
약간 소소한 내용, 이미 알고 있거나 실천 중인 내용들은 스킵했다....컨디션이 너무 안좋다ㅠㅠ