|
|
프로그램 실행 중 예외(Exception)가 발생할 수 있는 코드 블록을 감싸서,
예외가 발생했을 때 프로그램이 죽지 않도록 처리합니다.
try { int num = int.Parse("abc"); // 예외 발생 } catch (FormatException ex) { Console.WriteLine("숫자로 변환할 수 없습니다."); }
위 코드는 "abc"를 정수로 변환하려다 예외(FormatException)가 발생하지만,
catch 블록이 잡아서 처리하기 때문에 프로그램이 종료되지 않습니다.
✅ 2. throw문: 예외를 "직접 발생시키거나 재전달"
throw는 예외를 발생시킬 때 사용합니다.
이미 발생한 예외를 다시 던질(re-throw) 수도 있습니다.
throw new ArgumentException("잘못된 인자입니다.");
또는 예외를 처리한 후, 다시 상위 호출자에게 전달할 수도 있습니다:
catch (Exception ex) { // 로그 기록 등 처리 throw; // 예외를 다시 던짐 (원래 예외 정보 보존) }
🎯 요약: 차이점 정리
항목 try-catch throw
| 역할 | 예외를 잡고 처리함 | 예외를 발생시키거나 전달함 |
| 위치 | 예외가 발생할 가능성이 있는 코드 주위 | 예외를 만들거나 다시 던질 위치 |
| 사용 목적 | 프로그램이 죽지 않도록 예외 처리 | 오류 상황을 알리기 위해 예외를 발생 |
| 예시 | 잘못된 입력을 받아도 프로그램 계속 진행 | 비정상 상황을 호출자에게 알릴 때 사용 |
✅ 실전 예제 void Divide(int a, int b) { if (b == 0) { throw new DivideByZeroException("0으로 나눌 수 없습니다."); } Console.WriteLine(a / b); } try { Divide(10, 0); } catch (DivideByZeroException ex) { Console.WriteLine("에러 발생: " + ex.Message); }
throw: 문제 상황을 직접 발생시킴
try-catch: 그 예외를 받아서 처리
필요하시면 throw와 throw ex의 차이(스택 트레이스 보존 여부)도 설명해 드릴 수 있어요.