책 질문: 리팩터링(REFACTORING) 2판

안녕하세요. 부족한 지식으로 매번 질문을 할 때마다 어떤 카테고리에 써야 하는지 고민이 되네요…
프로그래밍 언어와는 무관한 질문입니다. 요즘 한창 리팩터링 2판 책을 공부하고 있는데요, 여러 번 읽어도 잘 이해되지 않는 구문이 있어서 질문드리려고 합니다.

‘11.12 오류 코드를 예외로 바꾸기’ 절의 일부를 발췌하겠습니다. (문제시 삭제하겠습니다.)

  • … 예외는 정교한 메커니즘이지만 대다수의 다른 정교한 메커니즘과 같이 정확하게 사용할 때만 최고의 효과를 낸다. 예외는 정확히 예상 밖의 동작일 때만 쓰여야 한다. 달리 말하면 프로그램의 정상 동작 범주에 들지 않는 오류를 나타낼 때만 쓰여야 한다. 괜찮은 경험 법칙이 하나 있다. 예외를 던지는 코드를 프로그램 종료 코드로 바꿔도 프로그램이 여전히 정상 동작할지를 따져보는 것이다. 정상 동작하지 않을 것 같다면 예외를 사용하지 말라는 신호다. 예외 대신 오류를 검출하여 프로그램을 정상 흐름으로 되돌리게끔 처리해야 한다.

위 문단에서 볼드체가 이해되지 않는 구문입니다. 예외 던지는 코드를 프로그램 종료 코드로 바꿨을 때도 정상 동작을 하면 애초에 예외를 던질 필요가 없는 것이 아닌지… 잘 와닿지 않네요.
혹시 예시라도 알 수 있을지 여쭤봅니다.

감사합니다!

2개의 좋아요

저는 이렇게 해석합니다. 볼드체 위의 문장에서 핵심 문장은,

이 말은 일반적인 정상 동작의 범위에서는 그 예외가 발생하지 않아야 한다는 말인데, 어느 정도의 수준이냐,

이정도 수준이라는 의미라는 것이죠.

예외가 종종 발생해서 프로그램이 종료될 수준이라면 그 예외가 정상 동작 범위안이라고 판단하고 잘못된 흐름을 프로그램에서 정정해서 예외로 처리하지 않게 하는 편이 좋다는 의미로 해석됩니다.

저는 이 부분을 다르게 이렇게 표현하고 싶습니다.

  • 통제 가능한 수준은 예외를 발생하지 않고 관련된 조치를 한다.

    • 예시
      • 네트워크를 이용한 전송 1회 전송 후 예외 → 3회 전송 후 예외
      • 스레드에 의한 충돌로 데이터 파괴. 관련 예외 발생 함 → 스레드 충돌이 일어나지 않도록 함
  • 그럼에도 불구하고 처리(복구)가 실패하면 그 때 예외 발생

10개의 좋아요