예외처리
프로그램이 실행되는 동안 문제가 발생하면 프로그램이 자동으로 중단됩니다.
이럴 경우에 프로그램이 대처할 수 있도록 처리하는 것이 예외 처리(Exception Handling)라고 합니다.
프로그램 실행 중에 발생하는 오류를 예외(Exception)라고 하고, 프로그래밍 언어의 문법적인 오류를 에러(Error)라고 합니다.
1) 예외처리 첫번째 방법 try/catch
try의 위에서부터 아래로 실행하면서 예외를 만나면 바로 catch로 바로 이동이 되고 다시 try로 돌아가지 않는다.
< 선언 >
try{
예외가 발생할 상황을 넣는곳
}catch{
예외가 발생했을때 어떻게 처리 할 것인지 넣는곳
}
ex1) 20/0을 시도 했더니 안되서 콘솔창에 System.DivideByZeroException 같은 말이 콘솔창에 떴다. 이럴 경우 catch()안에 DivideByZeroException을 넣어 오류를 잡아준다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int b = 20;
int a = 0;
int c = 0;
int total = 0;
int sub = 0;
try
{
c = b / a;
total = a + b;
sub = b - a;
}
catch(DivideByZeroException) // 오류가 생겼던 말을 catch()에 넣어줌
{
a = 2;
c = b / a;
}
Console.WriteLine(c);
Console.WriteLine(total);
Console.WriteLine(sub);
}
}
}
ex2) 모든 예외를 잡아주는 Exception으로 처리하는 경우
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int b = 20;
int a = 0;
int c = 0;
int total = 0;
int sub = 0;
try
{
c = b / a;
total = a + b;
sub = b - a;
}
catch(Exception) //모든 exceptio을 잡아줌
{
a = 2;
c = b / a;
}
Console.WriteLine(c);
Console.WriteLine(total);
Console.WriteLine(sub);
}
}
}
ex3) FormatException에 관한 예제
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
string[] stringNumber = { "23", "12", "998", "3.141592" };
try
{
for(int i=0; i<stringNumber.Length; i++)
{
int j = int.Parse(stringNumber[i]);
Console.WriteLine("숫자로 변환된 값은" + j);
}
}
catch(FormatException)
{
Console.WriteLine("정수로 변환할 수 없습니다.");
}
}
}
}
2)예외 처리의 두번쨰 방법 try/catch
try는 한개 catch는 여러개를 사용
catch에서 Exception을 사용할 거면 마지막 catch에 넣어주도록 해야함
<선언>
try{
}catch{
}catch{
}
3) 예외 처리 세번쨰 방법 try/catch/finally
<선언>
try{
}catch{
}finally{
무조건 실행되는 문장;
}
ex1) try -catch - finally를 이용한 경우
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
int value = 20;
int div = 2;
int[] intArray = { 1, 2, 3 };
try
{
int result = value / div;
Console.WriteLine(result);
int arrayValue = intArray[1];
Console.WriteLine(arrayValue);
}
catch(DivideByZeroException ae)
{
Console.WriteLine("0으로 나눌수없음");
}catch(IndexOutOfRangeException ae)
{
Console.WriteLine("배열의 범위를 넘음");
}
finally
{
Console.WriteLine("예외가 발생했음");
}
}
}
}
종합 예제
두수를 입력받아 나눗셈 연산을 수행하는 프로그램
- 힌트
- 입력된 두 수를 정수값으로 바꾸어 나눗셈한다.
- 모든가능한 예외사항에 대한 처리를 한다,
- 입력한 값이 숫자가 아닐 경우의 예외처리
- 0으로 나누는 경우에 해당하는 예외처리
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
int num1, num2;
System.Console.Write("숫자 1 입력 (정수) : ");
num1 = int.Parse(System.Console.ReadLine());
Console.Write("숫자 2 입력 (정수) : ");
num2 = int.Parse(Console.ReadLine());
int divide = num1 / num2;
Console.WriteLine(divide);
}
catch (DivideByZeroException)
{
Console.WriteLine("0은 안되요! 다른 숫자를 입력해주세요");
}
catch (FormatException e)
{
Console.WriteLine("문자열을 안되요 다른 값으로 넣어주세요");
}
}
}
}
'Programming > C#' 카테고리의 다른 글
C# ListView를 다뤄보자! (0) | 2021.05.27 |
---|---|
C# Window Form - 라벨, 버튼, 텍스트박스, 체크박스, 라디오박스 (0) | 2021.04.30 |
C# 과제 (0) | 2021.04.29 |
C# 메소드 (0) | 2021.04.29 |
C# 배열 실습(비정방향 배열) 각 행에 값을 넣어 합을 출력 (0) | 2021.04.29 |
댓글