개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned)
2022.02.22
오늘 읽은 범위
3장. 함수
책에서 기억하고 싶은 내용을 써보세요.
작게 만들어라
함수를 만드는 첫째 규칙은 작게다!, 함수를 만드는 둘째 규칙은 더 작게다!
if/else/while문에 들어가는 블록은 한줄이어야 의미다. 대게 거기서 함수를 호출한다. 블록 안에서 호출하는 함수의 이름을 잘 짓는다면 코드를 이해하기도 쉬워진다.
한 가지만 해라
함수는 한 가지를 해야한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.
함수 당 추상화 수준은 하나로!
함수가 확실히 한 가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
내려가기 규칙 - 코드는 위에서 아래로 이야기처럼 읽혀야 좋다. 즉 위에서 아래로 코드를 읽으면 함수 추상화 수준이 한번에 한 단계씩 내려간다.
Switch문
Switch문을 이용해야 한다면 '다형성'을 이용해라
서술적인 이름을 사용하라
이름이 길어도 괜찮다. 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.
함수 인수
함수 인수는 적을 수록 좋다. 인수는 개념을 이해하기 어럽게 만든다.
플래그 인수는 추하다. 함수로 부울 값을 넘기는 관례는 함수가 한번에 여러가지를 한다고 공표하는 셈이니까
함수의 의도나 인수의 순서와 의도를 정확히 표현하려면 좋은 함수 이름이 필수다.
(assertEquals(expected, actual) -> assertExpectedEqualsActual(expected, actual))
부수 효과를 일으키지 마라
부수 효과는 거짓말이다. 함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른일을 하니까.
부수 효과로 일어난 시간적 결합은 혼란을 일으킨다. 만약 시간적 결합이 필요하다면 함수 이름에 분명히 명시하라
명령과 조회를 분리하라
오류 코드보다 예외를 사용해라
오류 처리도 한 가지 작업이다. 함수는 한번에 한가지 작업만 해야한다. (if문으로 오류처리를 하지 말고 try/catch구문을 이용할 것)
반복하지 마라
중복은 소프트웨에서 모든 악의 근원이다. 코드가 늘어날 뿐 아니라 알고리즘이 변하면 모든 중복을 손봐야한다. 하나라도 놓치면 오류가 발생할 가능성이 있다.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
변수의 이름도 중요하지만 나는 함수의 이름이 정말 중요하다 생각한다. 코드를 짜면서 잘못 지어진 함수의 이름 때문에 스크롤을 내렸다 올렸다 반복한 경험이 한번씩은 있을 것이다. 함수의 이름을 정확히 기억하지 않아도 ide가 찾아주므로 이 책에서 말한것처럼 길고 서술적인 함수의 이름은 길고 서술적인 주석을 대체 할 수 있으며 스크롤하는 시간을 절약해 줄 수 있을것이다. 앞으로 코드를 짤 때 변수든 함수든 이름을 지을 때 충분히 시간을 들여 고민하고 지어야겠다. 또한 이번 챕터에서 중복을 없애라는 말이 와닿았다. 비슷한 기능을 구현할 떄 다른 함수를 복붙해와서 조금씩 수정해가면 코드를 짠적이 많다. 시간을 절약하기 위해 했던 내 코드 습관이 프로그램이 이상한 방향으로 흘러가게 만들 수 있다는 깨달음을 얻은 챕터였다.