try-catch
블록을 사용하여 예외 처리를 수행한다.try
블록 내에서 예외가 발생할 수 있는 코드를 작성, catch
블록에서 예외를 처리.try
{
// 예외가 발생할 수 있는 코드
}
catch (ExceptionType1 ex)
{
// ExceptionType1에 해당하는 예외 처리
}
catch (ExceptionType2 ex)
{
// ExceptionType2에 해당하는 예외 처리
}
finally
{
// 예외 발생 여부와 상관없이 항상 실행되는 코드
}
try
{
int zero = 0;
int result = 10 / zero; // ArithmeticException 발생
Console.WriteLine("결과: " + result);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("0으로 나눌 수 없습니다.");
}
catch (Exception ex)
{
Console.WriteLine("예외가 발생했습니다: " + ex.Message);
}
finally
{
Console.WriteLine("finally 블록이 실행되었습니다.");
}
public class NegativeNumberException : Exception
{
public NegativeNumberException(string message) : base(message)
{
}
}
try
{
int number = -10;
if (number < 0)
{
throw new NegativeNumberException("음수는 처리할 수 없습니다.");
}
}
catch (NegativeNumberException ex)
{
Console.WriteLine(ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("예외가 발생했습니다: " + ex.Message);
}
1. NegativeNumberException이라는 사용자 정의 예외 처리 클래스를 생성할 때, Exception이라는 부모 클래스를 상속 받는다.
2. 그 후, 클래스의 생성자를 만드는데, string message를 매개변수로 받는다.
3. 이 매개변수는 뒤의 base(message)는 Initializer로, 해당 생성자가 실행되기 전에 부모 4클래스의 생성자를 먼저 실행한 뒤에 해당 생성자를 실행한다.
→ 이 코드의 경우, base(message)는 Exception의 생성자를 먼저 실행한 후, 사용자 정의 예외 클래스의 생성자가 실행되게 된다.
// 플레이어 이동
try
{
// 플레이어 이동 코드
if (IsPlayerCollidingWithWall())
{
throw new CollisionException("플레이어가 벽에 충돌했습니다!");
}
}
catch (CollisionException ex)
{
// 충돌 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
// 리소스 로딩
try
{
// 리소스 로딩 코드
LoadResource("image.png");
}
catch (ResourceNotFoundException ex)
{
// 리소스가 없는 경우 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
catch (ResourceLoadException ex)
{
// 리소스 로딩 중 오류가 발생한 경우 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
// 게임 상태 전이
try
{
// 상태 전이 코드
if (currentGameState != GameState.Playing)
{
throw new InvalidStateException("게임이 실행 중이 아닙니다!");
}
// 게임 상태 전이 실행
}
catch (InvalidStateException ex)
{
// 상태 예외 처리
Debug.Log(ex.Message);
// 예외에 대한 추가 처리
}
예외 처리를 하는 목적은 우려되는 코드들을 예외 처리하기 위함이다. 그러나 try문 안에 너무 긴 코드를 넣게 되면 문제 파악하기가 어려워 예외 처리를 하기 어려워진다. 때문에 정말 우려가 되는 코드들만 넣는 것이 좋다.