예외 처리는 예외가 발생했을 때 예외를 캐치해서 해결한다는 뜻이다.
try문 안에서 예외사항이 발생할 경우 그에 상응하는catch문에서 그 예외를 처리한다.
try
{
// 예외 발생
}
catch(Exception e)
{
// 예외 처리
}
try로 코드를 실행시키고 예외가 발생한다면 catch문에서 예외를 처리한다.try
{
int a = 10;
int b = 0;
int result = a / b;
}
catch(DivideByZeroException e)
{
// 0으로 나눌 경우 처리
}
catch(Exception e)
{
// 모든 예외 사항에 대한 처리
}
result가 10을 0으로 나누려 하기 때문에 catch(DivideByZeroException e)에 잡히게 된다.
Exception은 모든 예외사항의 조상이다. 즉 모든 예외처리를Exception을 이용해 받을 수 있다.
try
{
// 예외 발생
}
catch(Exception e)
{
// 예외 처리
}
catch(DivideByZeroException e) // 컴파일 에러가 발생한다.
{
// DivideByZeroException일 경우 예외 처리
}
DivideByZeroException는 0으로 나눌때 발생하는 예외사항인데 이 클래스는 이미 Exception을 상속받고 있다.
만약 위와 같은 순서로 코드를 작성했다면 catch(Exception e)에서 모든 예외사항을 처리할 수 있기 때문에 뒤에 나타난 catch(DivideByZeroException e)는 실행될 일이 없어 컴파일 오류가 발생한다.
try-catch문과 상관 없이 무조건 코드를 실행한다
try
{
int a = 10;
int b = 0;
int result = a / b;
int c = 0; // 실행되지 않는다
}
catch(Exception e)
{
// 모든 예외 사항에 대한 처리
}
int result = a / b;에서 예외가 발생하기 때문에, catch문이 실행되어 예외처리가 진행되면 다시 try문에서 시작하는게 아니라 프로그램이 종료되기 때문에 int c = 0;은 실행되지 않는다.
try
{
int a = 10;
int b = 0;
int result = a / b;
}
catch(Exception e)
{
// 모든 예외 사항에 대한 처리
}
finally
{
int c = 0;
}
예외처리 여부와는 상관없이 꼭 실행되어야 할 코드라면 finally 안에다 작성하면 된다.
throw를 사용하여 직접 예외를 던질 수 있다.
// Program.cs
class Program
{
class TestException : Exception // 직접 정의한 예외
{
}
static void Main(string[] args)
{
try
{
// throw를 이용하여 TestException을 던져준다.
throw new TestException();
}
catch (Exception e)
{
// TestException에 대한 예외처리가 실행된다.
}
finally
{
// 예외처리에 상관없이 무조건 실행될 코드.
}
}
}
TestException은 직접 정의한 예외이기 때문에 Exception을 상속받는다.throw new TestException();으로 TestException객체를 만들어 예외로 던진다. -> catch문에서 잡힌다.
try-catch문을 이용해서 예외가 발생했을 때 예외처리를 할 수 있다.
Exception은 모든 예외를 처리할 수 있고, 모든 예외들은Exception을 상속받는다.
throw을 이용하여 직접 예외를 던저줄 수 있다.
인프런 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문 강의를 듣고 공식 문서를 참고하여 정리한 글 입니다.
개인 공부를 정리한 글이기 때문에 틀린 부분이 있을 수 있습니다.