Clean Code - 로버트 C. 마틴
7장, 오류 처리
- 잘못된 것을 바로 잡을 책임
1. 오류 코드보다 예외를 사용
- 오류 코드를 사용하면 함수를 호출한 즉시 오류를 확인해야 함
- 예외를 던지면 호출자의 코드가 깔끔해짐
2. Try-Catch-Finally 문부터 작성
- 예외 프로그램 안에 범위 정의
- try 블록에 들어가는 코드를 실행하면서 어느 시점에서든 실행이 중단된 후 catch 블록을 넘어갈 수 있음
- try-catch 블록은 프로그램 상태를 일관성 있게 유지해야 함
▶️ try 블록에서 생기는 일들에 대해 호출자가 기대하는 상태를 정의하기 쉬움
- 단위 테스트를 구현할 때, 강제로 예외를 일으키는 테스트케이스를 작성하여 try-catch문 구현 진행
3. 미확인(unchechked) 예외를 사용
- 확인된 예외는 OCP(Open Closed Principle: 개방 폐쇄의 원칙, 기존 코드를 변경하지 않고 기능을 추가하는 것)을 위반함
> catch 블록이 세 단계 위에 있으면 모든 메소드를 고쳐야 함
4. 예외에 의미를 제공
- 예외를 던질 때 전후 상황을 충분히 덧붙여야 함
- 오류 메시지에 정보를 담아 예외와 함께 던짐, 실패한 연산
5. 호출자를 고려해 예외 클래스 정의
- 오류를 정의할 때 가장 중요한 관심사는 오류를 잡아내는 방법이어야 함
- 외부 라이브러리가 던지는 예외를 모두 잡는 tray-catch문은 과연 좋은 방법일까?
> 호출하는 라이브러리 API를 감싸, 하나의 예외 코드만 반환하면 됨
> 반복되는 코드를 줄여야 함
> e.getMessage()를 이용하여 에러 던지기
- 감싸기 방법을 사용
> 특정 업체가 API를 설계한 방식에 발목 잡히지 않음
6. 정상 흐름을 정의
- 클래스나 객체가 예외적인 상황을 캡슐화 하여 처리
7. null 반환❌
if(item != null){
...
}
- null 체크하는 것을 까먹으면 문제가 생길 가능성이 큼
- 외부 API가 null을 반환하면 감싸기 메서드로 구현하여 예외를 던지거나 특수사례깩체를 반환해야 함
- null 대신 빈 리스트 등을 반환
8. null 전달❌
- 인수로 null을 전달하면 NullPointerException으로 문제가 발생할 수 있음
- assert 문 사용
결론
- Clean Code는 읽기도 좋아야 하지만 안정성도 필요함
'IT > 책' 카테고리의 다른 글
[Clean Code] 9장, 단위 테스트 (0) | 2021.11.07 |
---|---|
[Clean Code] 8장, 경계 (0) | 2021.11.07 |
[Clean Code] 6장, 객체와 자료 구조 (0) | 2021.11.05 |
[Clean Code] 5장, 형식 맞추기 (0) | 2021.10.30 |
[Clean Code] 4장, 주석 (0) | 2021.10.30 |