Language/C++

[C++] 32.Unmanaged Programming: 적절한 예외 처리

coco_daddy 2024. 1. 31. 00:57

적절한 예외처리

  • 예외상황: 컨트롤 할 수 없는 상황
  • 예외 안정성: 예외가 났지만 나기 전 상황으로 무사히 돌아가야 한다. → 원래 있었던 올바른 상태로 복구가 되어야 함.

1. 유효성 검사/예외는 오직 경계에서만 하기

  • 밖에서 오는 데이터를 제어할 수 없다. (파일을 읽고 있었는데 지워지거나, 데이터를 요청했는데 NULL이 오거나 등의 사유)
  • → 외부에서 들어오는 웹 요청, 파일 읽기/쓰기, 외부 라이브러리

2. 시스템에 들어온 데이터는 모두 올바르다고 간주할 것.

  • assert를 사용하여 개발 중 문제를 잡아내고 고칠 것.
    • assert → 디버그 중 발견할 수 있도록 함.

3. 예외 상황이 발생할 때는 NULL을 능동적으로 반한할 것.

  • 기본적으로 함수가 NULL을 반환하거나 받는 일이 없어야 한다.
  • 만약 NULL을 반환하거나, 받는다면 함수의 이름을 잘 지어야 한다.
    → orNull을 통해서 파라미터 혹은 함수 이름에 명시하라.

TDD 반대

  • 동일한 프로그래머가 로직과 예외를 모두 작성한다.
    → 동일한 프로그래머가 작성한 유니 테스트가 한계를 갖는 이유.
    → 로직이 잘못되었다면 예외도 잘못되었을 가능성이 높다.
  • 양질의 소프트웨어는 예외가 아니라 철저한 테스트 계획에서 만들어진다.