개발자 99% 커뮤니티에서 수다 떨어요!
TIL (Today I Learned)
2022.02.22
오늘 읽은 범위
3장. 함수
책에서 기억하고 싶은 내용을 써보세요.
함수는 작게!
if/else/while문에 들어가는 블록은 한 줄로! 거기서 대부분 함수를 호출하는데 이때 함수 이름을 적절히 지으면 이해가 더 쉬울 것.
‘중첩 구조가 생길만큼 함수가 커지면 안 된다는 뜻’
함수는 짧게 한 가지 일만, 잘 하도록 한다.
한 가지 작업만 한다는 게 무슨 뜻이냐면, 단순히 다른 표현이 아니라 의미 있는 이름으로 다른 함수를 추출할 수 있다면 그 함수는 여러 작업을 하는 것.
*코드는 위에서 아래로, ‘내려가기' 규칙에 따라 이야기처럼 읽혀야 좋다. 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다.(- 아래로 내려갈수록 더 구체적으로 쓰인다는 뜻인가?)
함수 이름은 서술적으로 짓는다. 길어도 괜찮다! (그만큼 개발자 머릿속에서도 설계가 뚜렷해지니까 코드 개선 하기도 수월하다.)
대신 일관성 있게!!!! 예) includeSetupAndTeardownPages, includeSetupPage, includeSuiteSetupPage ...
함수 인수는 없을수록 좋다. 최선은 입력 인수가 없게, 차선은 입력 인수가 1개.
이벤트 함수는 드물지만 아주 유용한 단항 함수 형식!
직교 좌표계 점은 인수 2개를 취하지만, 이건 한 값을 표현하는 두 요소이고, 순서도 정해져 있다.
반드시 나쁘다기보다, 함수 2개를 썼을 때 뒤따를 위험을 함께 생각해라!
*함수 이름에 인수 이름을 추가하면 아주 좋다!
예) assertEquals > assertExpectedEqualsActual(expected, actual)
함수는 뭔가를 수행하거나(명령) / 뭔가에 답하거나.(조회) 그 둘을 분리하라.
public boolean set(String attribute, String value); ⇒ 이름이 attribute인 속성을 찾아 값을 value로 설정 + 성공 여부 조회. 혼란스럽다!
⇒ if (attributeExists("username")) { setAttribute("username", "unclebob"); ... }
중복을 피하라.
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
점점 내용이 어려워지고 있다. 자바를 전혀 모르니 중간중간 나오는 예시들도 이해하는 데 한계가 있고, 코딩 경험이 없다보니 책 내용을 읽으며 적용해보기도 애매하다는 생각이 든다. 예를 들어, ‘추상화’의 사전적 정의는 이해했지만 ‘.append(”\n”)와 같은 코드는 추상화 수준이 아주 낮다' 같은 문장이 나오면 왜 그런 건지 이해할 수가 없다. 부수 효과의 뜻은 이해했는데, 3-6 사례에서 함수가 일으키는 부수효과가 Session.initialize() 호출이라는 점은 왜 그런지 모르겠다. 이렇게 예시도 이해할 수가 없으니까 집중력이 떨어지고 ㅠㅠ 한국어로 번역된 거라 그런지 다형적 객체 같은 표현을 읽었을 때 바로바로 이해하기 힘들다. 이 상태로 계속 읽어나가는데도 내게 도움이 될까 싶지만.. 우선! 할 수 있는 데까지 이어나가보기로 한다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
렌더링(rendering)
‘Render’라는 건 기본적으로 무엇인가를 지금과 다른 어떤 상태로 만든다는 뜻. ⇒ Rendering is the process of generating a photorealistic or non-photorealistic image from a 2D or 3D model by means of a computer system.
추상화: 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것
부수효과: 함수 내의 실행으로 인해 함수 외부가 영향을 받는 것// 책에서는 이렇게. ‘부수 효과는 거짓말이다. 함수에서 한 가지를 하겠다고 약속하고선 남몰래 다른 짓도 한다. 때로는 예상치 못하게 클래스 변수를 수정한다. 때로는 함수로 넘 어온 인수나 시스템 전역 변수를 수정한다.’