CleanCode 3장 함수
함수를 만들 때는 '읽기 쉽고', '이해하기 쉽고', '의도가 분명'해야한다
1. 작게 만들어라
첫째 규칙 "작게!"
둘째 규칙 "더 작게!"
20줄도 길다고 저자는 말한다
if/else/while 에 들어가는 블록도 한 줄로!
2. 한 가지만 해라
당연한 이야기지만 지키기 어려운 일이다. 함수는 무조건 한 가지 일만을 잘 해야한다
-> 추상화 수준에서 한 가지 일!! (확인이나 랜더링 같은 단순 작업 빼고)
이것이 어렵다면 "의미있는 이름으로 다른 함수를 추출할 수 있다"면 그 함수는 여러 작업을 하고 있는 것이다!
3. 내려가기 규칙: 위에서 아래로 코드가 읽혀야 한다
위애서 아래로 이야기처럼 읽히는 것이 좋은 코드다
-> 한 함수 다음에는 추상화 수준이 한 단계 낮은 함수가 온다
4. 서술적인 이름을 사용해라
// 위보다 아래가 이해하기 더 쉽다
testTableHtml
SetupTeardownIncluder
5. 함수 파라미터는 수가 적을수록 좋다
// 위보다 아래가 이해하기 더 쉽다
testTableHtml
SetupTeardownIncluder
함수에서 이상적인 인수 개수는 0개(무항) -> 1개(단항) -> 2개(이항)이다. 3개(삼항) 이상은 가능하면 피하는 편이 좋다
6. 부수효과를 일으키지 마라
public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPharase, password);
if ("Valid Password".equlas(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
public class UserValidator {
private Cryptographer cryptographer;
public boolean checkPassword(String userName, String password) {
User user = UserGateway.findByName(userName);
if (user != User.NULL) {
String codedPhrase = user.getPhraseEncodedByPassword();
String phrase = cryptographer.decrypt(codedPharase, password);
if ("Valid Password".equlas(phrase)) {
Session.initialize();
return true;
}
}
return false;
}
}
여기서 함수의 부수 효과는 Session.initialize() 호출이다.
분명 checkPassword 함수는 말 그대로 암호를 확인하는 함수이다. 그런데 내용에는 함수를 호출하다가 잘못하면 기존 세션정보를 지워버릴 수 있는 가능성이 존재한다.
7. 명령과 조회를 분리해라
함수는 뭔가를 수행하거나, 뭔가에 답하거나 둘 중 하나만 해야한다.
// "username" 이 "unclebob"으로 설정되어있는지 확인하는 코드인가?
// 아니면 "username" 을 "unclebob"으로 설정하는 코드인지 불확실
public boolean set(String attribute, String value);
if (set("username", "unclebob"))
8. 오류코드보다 예외를 사용해라
- 오류코드를 반환하려다 보면, if 문으로 여러단계로 중첩되는 코드를 야기하기 때문에 try/catch 를 사용하면 코드가 깔끔해진다.
- 하지만 그조차도 구조에 혼란을 일으키기 때문에 블록을 try/catch를 별도 함수로 뽑아내는 편이 더 좋다.
Author And Source
이 문제에 관하여(CleanCode 3장 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@miiunii/CleanCode-3장-함수
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Author And Source
이 문제에 관하여(CleanCode 3장 함수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@miiunii/CleanCode-3장-함수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)