개발자 99% 커뮤니티에서 수다 떨어요!
함수는 프로그램에서 가장 기본적인 단위이다.
함수를 잘 만드는 기교를 통해, 함수를 만들고,
전체 시스템이라는 이야기를 풀어 나가야 한다.
2022. 04. 26
3장. 함수
작게 만들어라! (p42)
if문/else 문/ while문 등에 들어가는 블록은 한 줄이어야 한다는 의미다. (p 43)
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. (p44)
추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다.(p45)
의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 셈이다.(p45)
함수 내 모든 문장의 추상화 수준이 동일 해야 한다. (p45)
한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다. (p46)
switch 문을 추상 팩토리에 꽁꽁 숨긴다.(p48)
서술적인 이름을 사용하라!(p49)
이름을 붙일 때는 일관성이 있어야 한다.(p50)
함수에서 이상적인 인수 개수는 0개(무항)다. (p50)
최선은 입력 인수가 없는 경우이며, 차선은 입력 인수가 1개뿐인 경우다. (p51)
플래그 인수는 추하다.(p52)
부동소수점 비교가 상대적이라는 사실은 언제든 주지할 중요한 사항이다.(p53)
인수가 2-3개 필요하다면 일부를 독자적인 클래스 변수로 선언할 가능성을 짚어본다.(p53)
부수 효과를 일으키지 마라!(p54)
출력 인수는 피해야 한다.(p56)
명령과 조회를 분리하라! (p56)
오류 코드보다 예외를 사용하라! (p57)
try/catch 블록을 별도 함수로 뽑아내는 편이 좋다.(p58)
오류 처리도 '한 가지' 작업에 속한다. (p59)
반복하지 마라! (p60)
초안은 대개 서투르고 어수선하므로 원하는 대로 읽힐 때까지 말을 다듬고 문장을 고치고 문단을 정리한다. 내가 함수를 짤 때도 마찬가지다. (p61)
진짜 목표는 시스템이라는 이야기를 풀어가는 데 있다는 사실을 명심하기 바란다. (p 62)
책에서 FitNesse를 구성하는 testableHtml함수를 예시로 들어 다양한 위의 사항을 설명했다. 책을 읽으며 소름이 돋았다. 처음에는 전혀 이해되지 않던 코드가 리팩토링을 마친 마지막 코드를 읽을 땐 흐름을 이해할 수 있었다. 물론 책을 읽어가며 얻은 부수적인 정보들도 많은 도움을 주었겠지만 일단 읽는 데에 거부감이 들지 않았고 시원하게 읽어나갈 수 있었다.
여태 코딩을 하며 반복되는 것에만 집중해서 함수를 짰고 함수는 단지 반복되는 것을 없애기 위해서만 사용된다고 생각해왔다. 반복이 좋지 않은 이유는 확장 및 개선하기가 힘들어서 이기도 하며 코드를 이해하기가 힘들어 지기 때문이다. 이 책을 읽기 전에는, 반복하는 것에 집중하여 함수를 짜도 코드를 이해하기가 힘들었다. 함수를 읽는데 오히려 더 고려해야 하는 사항들이 많아졌다. 함수를 짜서 복잡도를 줄여야 하는데 오히려 늘린 것이다. 기능을 구현하기 위해 다양한 인수를 사용하고, flag 인수를 서슴치 않고 사용하며, 함수 하나에서 다양한 일을 하는 함수를 만들어내서 오류처리하는 것이 힘들었다.
앞으로는 위에 기억하고 싶은 사항들을 생각하며 함수를 작성하고자 한다. 나도 소름이 돋을만한 코드를 작성할 수 있게 되었으면 좋겠다.
FitNesse 오픈 소스 테스트 도구
추상화 수준 ?
구조적 프로그래밍