[클린코드] 7일차 - 오류 보단 예외처리, 그리고 클린코드로 인한 중복 알레르기
클린코드 7일차 (p. 57~66(3장) )
들어가기 전..) 벌써 클린코드 고생길이 보이는 중 .. 다시 열심히 해야지. 작심삼일도 안 끊기면 된다.
3 함수
9. 오류 코드보다 예외를 사용하라!
- 명령 함수에서 오류 코드를 반환하는 방식은 명령/조회 규칙을 미묘하게 위반한다.
- 오류 코드 대신 예외를 사용하면 오류 처리 코드가 원래 코드에서 분리되므로 코드가 깔끔해진다.
1) try/catch 블록 뽑아내기
- try/catch 블록을 함수로 뽑아내는 편이 좋다.
// 모든 오류 처리
public void delete(Page page){
try {
deletePageAndAllReference(page);
} catch (Exception e){
logError(e);
}
}
// 실제로 페이지를 제거하는 함수 -> deletePageAndAllReference는 예외처리를 하지 않음.
private void deletePageAndAllReference(Page page) throws Exception {
deletePage(page);
registry.deleteReference(page.name);
configKeys.deleteKey(page.name.makeKey());
}
// 예외 처리 함수
private void logError(Exception e){
logger.log(e.getMessage());
}
2) 오류 처리도 한 가지 작업이다.
- 함수는 '한 가지' 작업만 해야 한다.
- 오류 처리도 '한 가지' 작업에 속한다. 즉, 오류 처리하는 함수는 오류만 처리해야한다.
3) Error.java 의존성 자석
- 오류 코드를 반환한다는 이야기는, 클래스든 열거형 변수든, 어디선가 오류 코드를 정의한다는 뜻이다.
- 아래와 같은 클래스는 의존성 자석(magnet)이다.
- 다른 클래스에서 Error enum을 import해 사용해야함. + 새 오류 코드를 추가하는 대신 기존 오류 코드 재사용.
public enum Error {
OK,
INVALID,
NO_SUCH,
LOCKED,
OUT_OF_RESOURCES,
WAITING_FOR_EVENT;
}
10. 반복하지 마라
-코드가 길어지고 알고리즘이 변하면 반복한 코드 모두를 손봐야 한다.
- 이러다 한 곳을 빠뜨리게 되면 오류가 발생할 가능성이 쫙쫙 올라간다.
- 중복은 소프트웨어에서 모든 악의 근원이다.
11. 구조적 프로그래밍
- 함수는 return 문이 하나여야 한다.
- 루프 안에서 break나 continue를 사용해선 안 되며 goto는 절대로 안.된.다.
12. 함수를 어떻게 짜죠?
- 글짓기와 비슷하다.
- 초안을 먼저 작성하라. (서투르고 어수선해도 괜찮다. + 서투른 코드를 빠짐없이 테스트하는 단위 테스트 케이스도 만든다,)
- 그 다음 코드를 다음고, 함수를 만들고, 이름을 바꾸고, 중복을 제거한다.
- 그 다음 메서드를 줄이고, 순서를 바꾼다. 이 와중에 항상 단위 테스트를 통과한다.
결론
- 프로그래밍 기술은 언제나 언어 설계의 기술이다.
- 여기서 설명한 규칙을 따른다면 길이가 짧고, 이름이 좋고, 체계가 잘 잡힌 함수가 나오리라.
- "하지만 진짜 목표는 시스템이라는 이야기를 풀어가는데 있다는 사실을 명심하기 바란다."
개인적인 견해
함수 파트에서 생각보다 직관적인(?) 유용한 예시가 없었던 것 같아 아쉽다. 정확하게 말하면 예시는 괜찮았지만 흥미를 불러일으킬만한 부분이 없다고 해야할까 ? 클린코드를 6일 정도 읽어보니 정말 중복만 보면 중복 알레르기가 생기는 듯하다. 거의 반 정리, 반 일기가 된 클린코드 정리 ! 애정한 하는 친구의 포스팅도 중복과 관련된 내용이라 댓글 쓰면서 너무 클린코드 생각(?)이 났다.. ㅎㅎ
'알아두면쓸데있는신기한잡학사전 > 독서일지' 카테고리의 다른 글
[클린코드] 9일차/10일차 - 나쁜 주석이 될 수 밖에 없는 주석 조건 (2) | 2023.11.01 |
---|---|
[클린코드] 8일차 - 나쁜 코드에 주석을 달지 마라. 새로 짜라. 하지만 좋은 주석은 분명히 있다. (2) | 2023.11.01 |
[클린코드] 6일차 - 좋은 함수를 위한 n가지 주의사항 (1) | 2023.10.30 |
[클린코드] 5일차 - 분명한 이름을 위한 의미있는 맥락(Context) 부여, 함수는 한 가지 일만. (1) | 2023.10.29 |
[클린코드] 4일차 - 의미 있는 이름 짓는 시간은 유의미하다. (2) | 2023.10.27 |