개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
- 대가 프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다.
- 설명한 규칙을 따른다면 길이가 짧고, 이름이 좋고, 체계가 잡힌 함수가 나오리라.
- 한가지 작업만 하는 함수를 작성해야한다.
TIL (Today I Learned) 날짜
2022.04.26
오늘 읽은 범위
3장. 함수
책에서 기억하고 싶은 내용을 써보세요.
어떤 프로그램이든 가장 기본적인 단위가 함수다.(p.40)
작게 만들어라! (p.42)
- 함수를 만드는 첫째 규칙은 '작게!'다
블럭과 들여쓰기(p.43)
- if/else 문, while 문 등에 들어가는 블록은 한줄이여야 한다. ( 중첩 구조가 생길만큼 함수가 커져서는 안 된다는 뜻이다.)
한 가지만 해라!(p.44)
- 함수는 한 가지를 해야한다. 그 한가지를 잘 해야 한다. 그 한 가지만을 해야한다.
- 한 가지 작업만 하는 함수는 자연스럽게 섹션으로 나누기 어렵다.
함수 당 추상화 수준은 하나로!(p.45)
- 함수가 확실히 '한 가지' 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야한다.
- 위에서 아래로 코드 읽기 : 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 핵심은 짧으면서도 한가지만 하는 함수다. 위에서 아래로 TO문단을 읽어내려 가듯이 코드를 구현하면 추상화 수준을 일관되게 유지하기가 쉬워진다.
Switch문
- switch문을 작게하긴 어렵다.
-일반적으로 나는 switch문을 단 한 번만 참아준다. 다형적 객체를 생성하는 코드 안에서이다.(p.49)
서술적인 이름을 사용하라!(p.49)
- 함수 이름을 정할 대는 여러 단어가 쉽게 읽히는 명명법을 사용한다. 그런다음, 여러 단어를 사용해 함수 기능을 잘 표현하는 이름을 선택한다.
- 서술적인 이름을 사용하면 개발자 머릿속에서도 설계가 뚜렸해지므로 코드를 개선하기 쉬워진다.
ex) testableHtml -> SetupTeardownIncluder.render
이항 함수(p.52)
- 이항함수가 위험이 따른다는 사실을 이해하고 가능하면 단항함수로 바꾸도록 애써야한다.
- 때로는 인수 개수가 가변적인 함수도 필요하다. ex) String.format 메서드
동사와 키워드 (p.54) : 함수의 의도나 인수의 순서와 의도를 제대로 표현하려면 좋은 함수 이름이 필수다.
- 단항 함수는 함수와 인수가 동사/명사 쌍을 이뤄야한다. ex) writeField(name)
- 함수 이름에 인수 이름을 넣는다. ex) assertExpectedEqualsActual(expected, actual) : 인수 순서를 기억할 필요가 없어진다.
부수 효과를 일으키지 마라!
- 부수 효과는 거짓말이다.(p.54)
- 부수 효과가 시간적인 결합을 초래한다.
명령과 조회를 분리하라!(p.56)
오류 코드보다 예외를 사용하라!(p.57)
- 오류코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.
- try-catch 블럭은 코드 구조에 혼란을 일으키며, 정상 동작과 오류처리 동작을 뒤섞는다. 그러므로 try-catch 블럭을 별도 함수로 뽑아내는 편이 좋다.(p.58)
- 오류 처리도 한 가지 작업이다.(p.59)
반복하지 마라!(p.60) - 중복은 소프트웨어에서 모든 악의 근원이다.!
구조적 프로그래밍(p.61) - return문 하나!
- 데이크스트라는 모든 함수와 함수 내 모든 블록에 입구와 출구가 하나만 존재해야 한다고 말했다.
소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 논문이나 기사를 작성할 때는 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 초안은 대게 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다. 함수를 짤 때도 마찬가지다.(p.61)
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
함수를 짜는 게 늘 막막했는데, 막막했던 나에게 도움이 많이 됐다. 더 지금 나의 현재 상황에 가장 와 닿았던 부분은 "소프트웨어를 짜는 행위는 여느 글짓기와 비슷하다. 논문이나 기사를 작성할 때는 먼저 생각을 기록한 후 읽기 좋게 다듬는다. 초안은 대게 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다. 함수를 짤 때도 마찬가지다.(p.61)" "처음부터 탁 짜내지 않는다. 그게 가능한 사람은 없으리라" "대가 프로그래머는 시스템을 (구현할) 프로그램이 아니라 (풀어갈) 이야기로 여긴다." 이다. 지식이 많이 부족한 터라 모든 것이 이해가 되지않았지만, 함수에 있어서는 더 정리된 느낌이다. 다른 파트도 마찬가지겠지만, 함수부분은 완독한 후에도 자주 들춰보며 참고할 것같다.
3장이 되니깐 코드가 길어지면서 이해가 안되는 코드가 보이기 시작했다. 자바공부를 더 열심히 해야겠다!
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
FitNesse(p.40) ?
-FitNesse는 웹 서버, 위키 및 소프트웨어 자동 테스트 도구이다. 이 솔루션은 Ward Cunningham의 통합 테스트 프레임 워크를 기반으로하며 시스템 기능에 대한 자세한 읽기 쉬운 설명을 가능하게하는 단위 테스트보다는 수용 테스트를 지원하도록 설계되었다. (위키백과)
플래그 인수(p.52)?
-API 리팩터링에서 나오는 개념으로 호출되는 함수가 실행할 로직을 호출하는 쪽에서 선택하기 위해 전달하는 인수이다.
추상화?
-사용자에게 관련 정보 만 표시하기 위해 데이터를 선택하는 프로세스이다.