TIL (Today I Learned)
2022.02. 22
오늘 읽은 범위
3장. 함수
책에서 기억하고 싶은 내용을 써보세요.
- 어떤 코드든 가장 기본적인 단위가 함수다.(p.40)
- 함수를 만드는 규칙
- 작게 만들기
- 함수는 하나의 추상화 수준을 가져야 한다.
- 함수는 한가지를 해야한다. 그 한가지를 잘해야 한다. 그 한가지만을 해야한다.(p.44)
- 한가지 작업을 하는 함수는 자연스럽게 섹션으로 나누기 어렵다.(p.45)
- 모듈 내 함수의 추상화 수준은 동일해야 한다.
- 내려가기 규칙 : 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다. 이것을 내려가기 규칙이라 한다.(p.46)
- 핵심은 짧으면서도 ‘한가지’만 하는 함수다.(p.46)
- switch 문은 추상팩토리에 숨겨 다형성을 이용해사용해야 한다.
- 서술적인 이름을 사용해라.
- “코드를 읽으면서 짐작했던 기능을 각 루틴이 그대로 수행한다면 깨끗한 코드라 불러도 되겠다”
- 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.(p.49)
- 함수 이름은 여러 단어가 쉽게 읽히는 명명법을 사용, 여러 단어를 사용해 함수 기능을 잘표현하는 이름을 선택, 최대한 서술적인 이름, 단 모듈 내에서 일관성이 있어야 한다.(p.49-50정리)
- 모듈 내에서 함수 이름은 같은 문구, 명사, 동사를 사용(includeSetupAndTeardownPage, includeSetupPages, includeSuiteSetupPate,... 등 이외의 함수의 이름을 유추할 수 있을 만큼의 일관성을 지녀야 한다)
- 좋은 이름을 고른 후 코드를 더 좋게 재구성 하는 사례도..(p.49)
- 함수 인수의 이상적인 개수는 무항(0개)다.
- 최선은 입력 인수가 없는 경우, 차선은 입력 인수가 1개인 경우다.(p.51)
- 플래그 인수 : 함수가 한꺼번에 여러 가지를 처리한다고 대놓고 공표하는 셈..(p.52)
- 이항함수 : 인수 개는 한 값을 표현하는 두요소로 자연적인 순서도 있다.(assertEquals(expected, actual) 하지만 이항삼수를 사용할 경우에는 위험이 따른다는 사실을 알고있어야하고 가능하면 단항 함수로 변경해야 한다.(p.52~53정리)
- 삼항함수 : 삼항함수를 생성할 경우에는 신중히 고려해야한다.(p.53)
- 인수 객체 : 인수가 2~3개를 넘어간다면 돚갖적인 클래스 변수로 선언할 가능성을...(p.53)
- 가변 인수 : 최대 삼항함수(p.54)
- 동사와 키워드
- 단항함수는 함수와 인수가 동사/명사 쌍을 이뤄야 한다. write(nmae) ⇒ 이름이 씀
- 함수 이름에 키워드를 추, 즉 함수이름에 인수명을 넣어준다. assertEquals ⇒ assertExpectedEqualsActual(expected, actual)
- 부수 효과를 일으키지 마라
- 시간적인 결합과 순서 종속성을 초래 (p.55)
- 출력인수를 피해라 (p.56)
- 명령과 조회를 분리
- 함수는 뭔가를 수행하거나 뭔가에 답하거나 둘 중 하나만 해야 한다. 둘 다 하면 안된다. 객체 상태를 반환하거나 객체 정보를 반환하거나..(p.56)
- 명령과 조회를 분리해 혼란을 애초에 뿌리 뽑는 방법이다.(p.57)
- 오류코드보다 예외를 사용
- try/Cath 블럭 뽑아내기
- 오류처리도 한 가지 작업
- Error.java의존성 자석 - enum으로 선언한 값들을 사용하는 것 보다 try-catch를 사용해 Exception클래스에서 파생된 값을 사용
- DRY(Don’t Repeat Yourself)
- 중복은 소프트웨어에서 모든 악의 근원이다.(p.60)
- 구조적 프로그래밍
- 함수가 아주 큰 경우에는 단일입/출구 규칙(single entry-exit rule)을 사용(p.61 정리)
- 함수는 어떻게 짜는것?
- 소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 논문이나 기사를 작성할 때는 멈ㄴ저 생각을 기록한 후 읽기 좋게 다듬는다...(p.61)
- 결론 (p.62)
- 함수는 그 언어에서 동사며, 클래스는 명사다.
- 프로그래밍 기술은 언제나 언어의 설계의 기술이다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
계속해서 반복하는 불필요한 중복 제거, 의미있는 이름, 규칙 준수.. 등을 보며 생각해보면, 막상 코드를 짤때 이런 규칙들을 신경쓰며 적용할 수 있을까라는 막막함이 앞선다.
코드를 읽을때 소설의 기승전결을 맞춰 제가 이런 코드를 써봤는데요 라고 제출하기도 민망할만큼 하드 코딩을 하고있다. 연습이지만.
그래도 마지막 가안의 수정과 테스트의 반복을 하며 나오는것이 함수다. 라는 결론 부분을 보고 그나마 용기를 얻어간다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.