개발자 99% 커뮤니티에서 수다 떨어요!
깨끗한 코드는 일기도 좋아야 하지만 안정성도 높아야한다.
오류처리를 프로그램 논리와 분리하면
독립적인 추론이 가능해지며 코드 유지 보수성도 크게 높아진다.
2022. 05. 06
7장. 오류 처리
뭔가 잘못될 가능성은 늘 존재한다.(p130)
오류 코드보다 예외를 사용하라.(p130)
강제로 예외를 일으키는 테스트 케이스를 작성한 후 테스트를 통과하게 코드를 작성하는 방법을 권장한다.(p133)
미확인 예외를 사용하라(p133)
확인된 예외는 OCP를 위반한다.(p134)
예외에 의미를 제공하라(p135)
오류를 정의할 때 프로그래머에게 가장 중요한 관심사는 오류를 잡아내는 방법이 되어야 한다.(p135)
오류를 처리하는 방식은(오류를 일으킨 원인과 무관하게) 비교적 일정하다. 1) 오류를 기록한다. 2) 프로그램을 계속 수행해도 좋은지 확인한다. (p136)
실제로 외부 API를 사용할 때는 감싸기 기법이 최선이다.(p137)
특수 사례 패턴이라 부른다. 클래스를 만들거나 객체를 조작해 특수 사례를 처리하는 방식이다. 그러면 클라이언트 코드가 예외적인 상황을 처리할 필요가 없어진다.(p138)
null을 반환하지 마라(p138)
null을 반환하고픈 유혹이 든다면 그 대신 예외를 던지거나 특수 사례 객체를 반환한다.(p139)
null을 전달하지 마라(p140)
애초에 null을 넘기지 못하도록 금지하는 정책이 합리적이다.(p142)
깨끗한 코드는 읽기도 좋아야 하지만 안정성도 높아야 한다.(p142)
오류 처리를 프로그램 논리와 분리해 독자적인 사안으로 고려하면 튼튼하고 깨끗한 코드를 작성할 수 있다.(p142)
null을 반환하거나 null이 입력 되었을 때 조건문으로 처리하는 방법을 자주 사용하였다. 항상 잘 짜여진거 같아도 이런 처리가 필요하다 생각했을 때 쓰게 되면 지저분해 보였는데 특수 사례 패턴이나 null을 인자 입력으로 넘기지 못하도록 금지하는 정책 등 대선배님의 경험을 통한 해결책이 감사했다.
감싸기 기법도 인상 깊었다. 외부 클래스를 사용할 때 외부클래스에서 발생하는 오류를 바로 사용 메서드에서 처리하는 식으로 짜왔는데 외부 API를 감싸는 객체로 만들어 내부에서 처리한다면 확실히 프로그램 논리만 남게 되어 더 가독성 좋은 코드를 짤 수 있을 거 같았다.
p132의 "예외에서 프로그램 안에다 범위를 정의한다는 사실"이 무슨 의미인지 잘 모르겠다. 그저 try-catch문으로 예외가 발생하는 범위를 정하는 것을 의미하는 것일까?
try-catch가 어떻게 동작하여 처리되는지 궁금해졌다. try문 안에서 오류가 발생했을 때 프로그램의 내부 동작이 궁금하다. throw문이 실행되면 바로 catch문으로 점프하는 것일까? 함수 호출처럼 동작하게 될까? 아니면 if문 else문 처럼 동작할까?