함수
함수를 이해하기 쉽게 만들자.
작게 만들어라.
- 함수를 만드는 규칙 첫번째는 작게 두번째도 작게다 그만큼 작게 만드는 것이 중요하다.
- 아주 긴 함수와 짧은 함수를 비교했을 땐 짧은 함수가 더 낫다.
얼마나 짧아야할까?
- 책에서 나오는 예제로 자바 스윙 프로그램 예시를 들고 있는데 이 예시에서는 함수가 모드 2~4줄 정도라고 한다.
// 책의 예시 public static String renderPageWithSetupAndTeardowns ( Pagedata pageData, boolean isSuite) throws Exception { if(isTestPage(pageData)) includeSetupAndTeardownPages(pageData, isSuite); return pageData.getHtml(); }
- 블록과 들여쓰기
- if,else / while 문 등이 들어가는 블록은 한줄이어야 한다는 의미를 가지고 있다.
- 그러면 바깥을 감싸는 함수가 작아질 뿐 아니라 블록 안에서 호출하는 함수 이름을 적절하 짓는다면 코드를 이해하기도 쉬워진다.
- 중첩 구조가 생길만큼 함수가 커져서는 안된다. 그러므로 함수에서 들여쓰기 수준은 1단이나 2단을 넘어서지 않도록 코드를 작성하자. 그래야 이해하기 쉽다
한가지만 해라.
- 보통 함수가 길다는 뜻은 아닐 수도 잇겠지만 나의 경험으로는 하나의 함수에서 많은 일들을 하고 있었던 것이 문제였다.
- 책에서도 비슷한 이야기를 해주는 것 같았다.
함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야한다.
함수 당 추상화 수준은 하나로.
- 함수가 확실히 한가지 작업만 하려면 함수 내 모든 문장의 추상화 수준이 동일해야 한다.
- 한 함수 내에 추상화 수준을 섞으면 코드를 읽는 사람이 헷갈린다.
- 위에서 아래로 코드 읽기 : 내려가기 규칙
- 코드는 위에서 아래로 이야기처럼 읽혀야 좋다.
- 한 함수 다음에는 다음 추상화 수준이 한 단계 낮은 함수가 온다.
- 즉 위에서 아래로 프로그램을 읽으면 함수 추상화 수준이 한 번에 한 단계씩 낮아진다.
- [예시]
- TO 설정 페이지와 해제 페이지를 포함하려면 설정 페이지를 포함하고 테스트 페이지 내용을 포함하고, 해제 페이지를 포함한다.
- TO 설정 페이지를 포함하려면 슈트이면 슈트 설정 페이지를 포함한 후 일반 설정 페이지를 포함한다.
- TO 슈트 설정 페이지를 포함하려면 부모 계층에서 …
Switch 문
- switch 문은 작게 만들기 어렵다. case 분기가 단 두 개인 switch 문도 글쓴이는 길다고 생각하는 것 같다.
- switch 문을 저차원 클래스에 숨기고 절대로 반복하지 않느 방법이 있다, 물론 다형성을 이용한다.
서술적인 이름을 사용하라
- 이름이 길어도 괜찮다. 길고 서술적인 이름이 짧고 어려운 이름보다 더 좋다.
- 길고 서술적인 이름이 길고 서술적인 주석보다 좋다.