욱'S 노트

Clean Code - 함수 본문

Methdology/Clean Code

Clean Code - 함수

devsun 2015. 7. 3. 18:40

작게 만들어라


함수의 첫번째 규칙은 작게, 두번째 규칙도 작게이다. 


public static String renderPageWithSetupsAndTearDowns (PageData pageData, boolean isSuite) throws Exception {

if (isTestPage(pageData))

includeSetupAndTearDownPages(pageData, isSuite);

return pageData.getHtml();

}


블록과 들여쓰기는 최대한 작아야 한다. if/else/while 이 들어가는 블록은 한 줄이어야 한다. 함수의 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다.


한가지만 해라. 


버퍼를 생성하고 상속된 페이지를 검색하고, 경로를 랜더링한다면 각각을 함수의 쪼개라.


함수를 한가지를 해야하며, 그 한가지만 잘해야 한다. 


함수내 추상화 수준을 동일하게 하자.


getHtml() 이라는 코드의 추상화 수준은 매우 높다. PathParser.render()는 중간이다. append("\n")와 같은 코드는 추상화 수준이 아주 낮다.


이런 식으로 추상화 수준이 다양하게 함수에서 나타난다면 코드를 읽는 사람이 헷갈린다.


코드는 내려가기 규칙이 좋다. 함수의 내용은 현재 함수과 표현하는 추상화 단계의 한 단계 아래여야 한다.


Switch문


Switch 문은 작게 만들기 어렵다. switch 문은 단 한번만 참아준다. 다형적 객체를 생성하는 코드 안에서이다.


서술적인 이름을 사용해라.


함수가 하는 일을 좀 더 잘 표현할 수 있다.


함수 인수


함수에서 이상적인 인수 개수는 0개이다. 다음은 1개, 3개는 가능하면 피하면 좋다. 4개 이상은 특별한 인수가 있어도 사용하면 안된다.


플래그 인수는 추하다. 함수로 boolean 값을 넘긴다는 것은 두 가지 일을 한다고 공표하는 것이다.


부수 효과를 일으키지 마라.


부수 효과는 거짓말이다. 함수에서 한가지를 하겠다고 약속하고선 남몰래 다른 짓도 하니까. 함수로 넘어온 인수나 시스템 전역 변수를 수정한다.


이럴 경우 temporal coupling이나 order dependency가 생길 수 있다.


출력 인수는 무조건 피해야 한다. appendFooter(s) 를 보면 꼬리말에 무언가를 붙인다고 상상한다. 그런데 s에 footer가 붙는거라면...


일반적으로 인수는 함수의 입력이다.


명령과 조회를 분리하라!


if (set("username", "son")) 다음과 같은 코드를 보면 무엇이 결과로 나올지가 너무 모호하다.


오류 코드보다 예외를 사용하라!


E_OK, E_ERROR를 리턴하면 호출자는 항상 해당 코드를 처리해야 하는 부담을 가질 수 밖에 없다. 


오류 처리도 한가지 작업이므로 오류를 처리하는 함수를 만들자.



'Methdology > Clean Code' 카테고리의 다른 글

Clean Code - 객체와 자료구조  (0) 2015.07.15
Clean Code - 형식 맞추기  (0) 2015.07.10
Clean Code - 주석  (0) 2015.07.08
Clean Code - 의미 있는 이름  (0) 2015.06.16
Clean Code - 깨끗한 코드  (0) 2015.06.16
Comments