본문 바로가기

CS/CS Book

[Clean Code | 7장 오류처리 ] Day10~12

기억하고 싶은 부분

  • 뭔가 잘못될 가능성은 늘 존재한다. 뭔가 잘못되면 바로 잡을 책임은 바로 우리 프로그래머에게 있다.
  • 어떤 면에서 try 블록은 트랜잭션과 비슷하다. try 블록에서 무슨 일이 생기든지 catch 블록은 프로그램 상태를 일관성 있게 유지해야 한다.
  • null을 반환하는 습관
    • 흔히 저지르는 바람에 오류를 유발하는 행위를 설명하면서 첫 번째 예시로 들음
  • null을 반환하는 코드는 일거리를 늘릴 뿐만 아니라 호출자에게 문제를 떠넘긴다. 누구하나라도 null 확인을 빼먹는다면 애플리케이션이 통제 불능에 빠질지도 모른다.
  • null 확인이 너무 많아 문제. 메서드에서 null을 반환하고픈 유혹이 든다면 그 대신 예외를 던지거나 특수 사례 객체를 반환한다.
  • 특수 사례 패턴 (SPECIAL CASE PATTERN)
    • 클래스를 만들거나 객체를 조작해 특수 사례를 처리하는 방식


Before

try {
	MealExpsenses expenses = expenseReportDAO.getMeals(employee.getID());
	m_total += express.getTotal();
} catch(MealExpenseNotFound e) {
	m_total += getMealPerDiem();
}

After

MealExpsenses expenses = expenseReportDAO.**getMeals(employee.getID())**;
m_total += express.getTotal();

소감

  • null을 던지지 말라는 부분이 생각지 못한 부분이라 인상 깊었다.
    그러면서도 꼭 저 방식이 맞는가라는 의문이 든다.
  • C 같은 경우에는 null을 보내야 할 때가 있는데 모든 언어에 맞출 수는 없겠다는 생각이 든다.
    책에서는 return 값이 배열이었으므로 빈 배열을 return 하는 게 낫다고 하는데 빈 배열을 여러 언어에서 null과 비슷하게 처리하기 쉽겠지만 언어의 특성에 따라 달라질 부분이라 언어의 특성을 잘 알아야 null return을 회피해서 오류처리가 가능하다 생각 든다.
  • 책에서 들었던 null return이 나쁘다 하는 사례들은 납득이 되었지만 반례는 무엇이 있을까라는 생각이 든다.
  • 어떤 회사에서는 clean code 책을 열렬히 믿는 사람을 뽑지 않는다고 하는데 null return 하지 말라는 부분이 그런 경우 중 하나가 될 수 있지 않을까 생각 들었다