잘못된 인자
std::invalid_argument
음수 데이터처럼 호출자가 지킨 전제 조건이 깨졌을 때 의미가 분명합니다.
정수나 문자열도 던질 수 있지만, 복구 기준과 로그 메시지를 남기려면 `std::exception` 계층이나 도메인 예외가 더 읽기 쉽습니다.
std::invalid_argument
음수 데이터처럼 호출자가 지킨 전제 조건이 깨졌을 때 의미가 분명합니다.
std::out_of_range
`vector::at`처럼 인덱스나 값이 정해진 한계를 벗어났음을 표현합니다.
std::runtime_error
파일 열기 실패, 하드웨어 오류처럼 실행 중 외부 상태가 실패한 경우에 맞습니다.
MyCustomException
패킷 크기, 주문 상태처럼 복구 판단에 필요한 도메인 값을 예외 객체에 함께 싣습니다.
논리 오류인지, 실행 환경 문제인지, 도메인 규칙 위반인지 먼저 나눕니다.
`throw std::runtime_error(...)`처럼 런타임이 예외 객체 생명 주기를 관리하게 둡니다.
복구 가능한 예외를 먼저 받고, 마지막에 `const std::exception&`로 보고합니다.
실전 기준: 메시지만 필요한 기본 상황은 표준 예외로 충분하고, 복구에 필요한 필드가 있다면 `std::runtime_error`를 상속한 사용자 예외를 고려합니다.