1. 서술적인 이름을 사용하자
함수명을 좋게 작성할수록 코드의 가치는 더욱 높아진다.
왜냐하면 코드를 읽으면서 코드의 기능을 짐작을 할 수 있다면 깨끗한 코드이기 때문이다.
이름은 길어도 괜찮다. ( 길고 서술적인 이름이 짧고 어려운 이름보다 좋다. )
이름을 정하는데 시간을 들여도 괜찮다. ( 그만큼 보답이 따를 것이다. )
이름을 좋게 만들수록 개발자가 설계하기도 쉽고 코드를 개선하기도 쉬워진다.
이름을 붙일 때는 일관성이 있게 하자.
(좋은 예시)
includeSetupAndTeardownPages, includeSetupPages, includeSuiteSetupPage, includeSetupPage
2. 함수 인수의 개수는 중요하다
함수에서 이상적인 인수 개수는 0개이고, 그다음 1개, 2개, 3개로 나아간다.
4개 이상은 피하도록 하자!
출력인수 또한 없는 것이 가장 이상적이다.
3. 부수 효과를 일으키지 말자!
함수 내에서 한 가지만 하겠다고 약속했는데, 남몰래 다른 짓을 하면 안 된다
이는 시간적인 결합 또는 순서 종속성을 초래한다.
(예시)
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.decrpyt(codedPhrase, password);
if("Valid Password".equals(phrase)){
Session.initialize(); // password만 확인하는 줄 알았는데,,,, 세션까지 초기화?? (부수효과)
return true;
}
}
return false;
}
}
4. 명령과 조회는 분리하자
함수는 객체 상태를 변경(set)하거나 객체 정보를 반환(get)하는 기능을 동시에 하면 혼란이 초래된다.
따라서 이 둘은 분리시켜주자
5. 오류 코드 반환보다 예외 처리를 할 수 있도록 하자
오류 코드 반환 예시
if(deletePage(page) == E_OK){
if(registry.deleteReference(page.name) == E_OK){
if(configKeys.deleteKey(page.name.makeKey()) == E_OK){
logger.log("page deleted");
}else{
logger.log("configKey not deleted");
}else{
logger.log("deleteReference from registry failed");
}
//...
예외 사용 코드 예시
try{
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}catch(Exception e){
logger.log(e.getMessage());
}
참고 : 클린 코드 ( 로버트 C. 마틴 )
반응형
'CLEAN CODE' 카테고리의 다른 글
주석..주석에 대한 개인적인 고찰 (0) | 2021.11.07 |
---|---|
CLEAN 함수 (3) (0) | 2021.06.01 |
스위치 문 리팩토링( Refactoring Switch statement ) (0) | 2021.05.27 |
CLEAN 함수 (1) (0) | 2021.05.25 |
CLEAN 코드 네이밍 (2) (0) | 2021.05.24 |