Community

개발자 99% 커뮤니티에서 수다 떨어요!

← Go back
클린코드 읽기 #11
#clean_code
2년 전
580

오늘 TIL 3줄 요약

  • null을 반환하지 않도록 예외 호출 or 정상 흐름을 고려한 특수 사례 객체 사용하자!

  • wrapper class로 예외 처리는 꽤 좋은 기법이다.

TIL (Today I Learned) 날짜

2022.03.04

오늘 읽은 범위

7장. 오류 처리

책에서 기억하고 싶은 내용을 써보세요.

오류 코드보다 예외 처리를 사용하라

  • 논리와 오류 처리 코드가 뒤섞이지 않는다.

미확인 에러를 확인하라

  • 확인된 예외는 OCP(Open Closed Principle)를 위반한다.

    • 하위 단계에서 코드를 변경하면 상위 단계 메서드 선언부를 전부 고쳐야 한다.

      • 새로운 오류를 추가할 때, 최상위 메서드와 중간 메서드의 선언부에 모두 throw절을 추가해야 한다.

예외에 의미를 제공하라

  • 실패한 코드의 의도를 파악하려면 호출 스택만으로 부족하다.

  • 오류 메시지에 정보를 담아 예외와 함께 던진다.

  • 외부 API를 감싸서 독자적인 예외를 던지면,
    외부 라이브러리와 프로그램 사이에서 의존성이 크게 줄어든다.

    • 특정 업체가 API를 설계한 방식에 발목 잡히지 않는다.

정상 흐름을 정의하라

  • 때로는 중단이 적합하지 않은 때도 있다.

    • 예외 사례를 처리할 필요가 없어진다.

  • 특수 사례 패턴(Special Case Pattern), 클래스를 만들거나 객체를 조작해 특수 사례로 처리하는 방식이다.

null을 반환하지 마라

  • null을 반환하는 코드는 호출자에게 문제를 떠넘긴다.

  • 메서드에서 null을 반환하고픈 유혹이 든다면 그 대신 예외를 던지거나 특수 사례 객체를 반환한다.

null을 전달하지 마라

  • 대다수 프로그래밍 언어는 호출자가 실수로 넘기는 null을 적절히 처리하는 방법이 없다.
    그렇다면 애초에 null을 넘기지 못하도록 금지하는 정책이 합리적이다.

오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요

첫째로, 모든 외부 API 예외 종류에 대한 처리를 해야한다는 고정관념을 버리게 되었다. firebase를 주로 사용하는데, 모든 errorcode에 대해서 switch-case문을 통해 새로운 error를 던져주곤 했는데, 특별히 중요하지 않은 에러에 대해선 새롭게 정의한 에러, wrapper class 도입을 생각해보게 되었다.

둘째로, 요즘 react에서 Errorboundary, Suspense를 사용해 비동기 처리를 진행하려고 하고 있다.

해당 함수가 어떤 역할을 하는지 명확하게하고, 에러 코드를 분리할 수 있어 좋았는데, 이 개념이 이번 책에 나온 '감싸기'클래스 였고, 덕분에 이해하기 쉬웠다.

셋째로, 그리고 null의 입력을 피해야한다는 점도 와닿았다. 각종 메서드에서 잘못 출력하면 대개 null, undefined가 출력되는 경우가 많았는데, 그러면 호출하는 위치에서 널 병합 연산자(??)나, 논리 연산자 ||를 사용해야한다. typescript가 그런 부분을 많이 잡아주지만, runtime시엔 또 잡아주지 못하니, null을 반환하지 않는다는 원칙이 있으면 더 안정성 있는 코드를 작성할 수 있을 것이다.