이 글의 개념 및 코드들은 책을 읽으며 정리한 내용을 바탕으로 작성하였습니다.
함수는 뭔가를 수행하거나
뭔가에 답하거나
둘 중에 하나만 해야한다.
public boolean set(String attribute, String value);
이 함수는 이름이 attribute인 속성을 찾아
값을 value로 설정한 후
성공하면 true를 반환
실패하면 flase를 반환한다.
if (set("userName", "goodGid"))
userName이 goodGid으로 설정되어 있는지 확인하는 코드인가?
userName을 goodGid로 설정하는 코드인가?
이 글의 개념 및 코드들은 책을 읽으며 정리한 내용을 바탕으로 작성하였습니다.
Try/Catch 블록을
별도 함수로 뽑아내면
코드가 깔끔해진다.
Before
public void delete(Page page) {
try {
deletePage(page);
registry.deleteReference(page.name);
configKyes.deleteKey(page.name.makeKey());
} catch (Exception e) {
logger.log(e.getMessage());
}
}
After
public void delete(Page page) {
try {
deletePageAndAllReferences(page);
} catch (Exception e) {
logError(e);
}
}
private void deletePageAndAllReferences(Page page) throws Exception {
deletePage(page);
registry.deleteReference(page.name);
configKyes.deleteKey(page.name.makeKey());
}
private void logError(Exception e) {
logger.log(e.getMessage());
}
실제로 페이지를 제거하는 함수는 deletePageAndAllReferences이다.
deletePageAndAllReferences 함수는 예외를 처리하지 않는다.
예외 처리는 logError 함수가 담당한다.
이렇게 정상 동작과 오류 처리 동작을 분리하면
코드를 이해하고 수정하기 쉬워진다.
이 글의 개념 및 코드들은 책을 읽으며 정리한 내용을 바탕으로 작성하였습니다.
대다수의 이름은 분명하지 못하다.
그럴 경우엔 접두어를 붙혀보자.
이 글의 개념 및 코드들은 책을 읽으며 정리한 내용을 바탕으로 작성하였습니다.
본질적으로 Switch 문은 N가지를 처리한다.
그렇기 때문에 Switch 문은 작게 만들기 어렵다.
하지만 다형성을 이용하여
각 Switch 문을 저차원 클래스에 숨기는 방법이 있다.
이 글의 개념 및 코드들은 책을 읽으며 정리한 내용을 바탕으로 작성하였습니다.