try ๋ธ๋ก์์ ์ฝ๋๋ฅผ ์คํํ๋ค๊ฐ ์์ธ๊ฐ ๋์ ธ์ง๋ฉด ํ๋ก๊ทธ๋จ์ ์คํ์ด catch ์ ๋ก ๋ฐ๋ก ๋ฐ์ด๋์ด์จ๋ค.
๋ง์ฝ ์์ธ ๋๋ฌธ์ try ๋ธ๋ก์ ์์ ํด์ ๊ฐ์ ์ค์ํ ์ฝ๋๋ฅผ ๋ฏธ์ฒ ์คํํ์ง ๋ชปํ๋ค๋ฉด?
์ด๋ ๊ณง ๋ฒ๊ทธ๋ฅผ ๋ง๋๋ ์์ธ์ด ๋ ๊ฒ์ด๋ค!
์๋ฅผ ๋ค์ด ๋ค์ ์ฝ๋์ ๊ฐ์ด try ๋ธ๋ก ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปค๋ฅ์ ์ ๋ซ๋ ์ฝ๋๊ฐ ์์๋๋ฐ ๊ฐ์๊ธฐ ๋ฐ์ํ ์์ธ ๋๋ฌธ์ ์ด๊ฒ์ ์คํํ์ง ๋ชปํ๋ค๋ฉด ์ฌ์ฉํ ์ ์๋ ์ปค๋ฅ์ ์ด ์ ์ ์ค์ด ๋์ค์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ํ ์ฐ๊ฒฐํ ์ ์๋ ์ํ์ ์ด๋ฅผ ์ ์๋ค.
<์์>
try
{
dbconn.Open(); //dbconn์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์
//...
dbconn.Close(); //์ด๋ฐ ์ฝ๋๋ ๋ฒ๊ทธ๋ฅผ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
}
catch (xxxException e)
{
//...
}
๊ทธ๋ ๋ค๊ณ ์์์ ํด์ ํ๋ ์ฝ๋๋ฅผ ๋ชจ๋ catch ์ ์ ๋ฐฐ์นํ๋ ๊ฒ๋ ์ฝ๋ ๋ฐ๋ณต์ด ๋ฐ์ํ์ฌ ์ข์๋ณด์ด์ง ์๋๋ค.
try
{
dbconn.Open();
//...
dbconn.Close(); //์ฝ๋ ์ค๋ณต!!!
}
catch (xxxException e)
{
//...
dbconn.Close();//์ฝ๋ ์ค๋ณต!!!
}
catch (xxxException e)
{
//...
dbconn.Close();//์ฝ๋ ์ค๋ณต!!!
}
C#์์๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ ๋ ์์ ํด์ ๊ฐ์ ๋ท๋ง๋ฌด๋ฆฌ๋ฅผ ์ฐ์ํ๊ฒ ์คํํ ์ ์๋๋ก finally ์ ์ try~catch ๋ฌธ๊ณผ ํจ๊ป ์ ๊ณตํ๋ค. finally ์ ์ try~catch ๋ฌธ์ ์ ์ผ ๋ง์ง๋ง์ ์ฐ๊ฒฐํด์ ์ฌ์ฉํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ด ๋ท์ ๋ฆฌ ์ฝ๋๋ฅผ ๋ฃ์ด๋๋ฉด ๋๋ค.
try
{
dbconn.Open();
//...
}
catch (xxxException e)
{
//...
}
catch (xxxException e)
{
//...
}
finally
{
dbconn.Close(); //์ฐ์ํ ์ฒ๋ฆฌ
}
์์ ์ด ์์๋ try์ ์ด ์คํ๋๋ค๋ฉด finally์ ์ ์ด๋ค ๊ฒฝ์ฐ๋ผ๋ ์คํ๋๋ค. ์ฌ์ง์ด try์ ์์์ return ๋ฌธ์ด๋ throw ๋ฌธ์ด ์ฌ์ฉ๋๋๋ผ๋(์ด ๋๋ฌธ์ฅ์ ํ๋ก๊ทธ๋จ์ ํ๋ฆ ์ ์ด๋ฅผ ์ธ๋ถ ์ฝ๋๋ก ์ฎ๊ธด๋ค) finally ์ ์ ๊ผญ ์คํ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ์คํํ๋ฉด ์์ธ๊ฐ ์ผ์ด๋๋ ์ผ์ด๋์ง ์๋ ๋ฐ๋์ finally ์ ์ ์ฝ๋๋ฅผ ์คํํ๋ค.
static int Divide(int dividend,int divisor)
{
try
{
WriteLine("Divide() ์์");
return dividend / divisor; //์์ธ๊ฐ ์ผ์ด๋์ง ์๊ณ ,
//์ ์์ ์ผ๋ก return์ ํ๋๋ผ๋ finally ์ ์ ์คํ๋๋ค.
}
catch (DivideByZeroException e)
{
WriteLine("Divide() ์์ธ ๋ฐ์");
throw e; //์์ธ๊ฐ ์ผ์ด๋๋๋ผ๋ finally ์ ์ ์คํ๋๋ค.
}
finally
{
WriteLine("Divide() ๋");
}
}
๋ค์์ finally ์ ์ ์ฌ์ฉํ๋ ์์ ํ๋ก๊ทธ๋จ์ด๋ค.
using System;
using System.Collections;
using static System.Console;
namespace Finally
{
class MainApp
{
static int Divide(int dividend, int divisor)
{
try
{
WriteLine("Divide() ์์");
return dividend / divisor; //์์ธ๊ฐ ์ผ์ด๋์ง ์๊ณ ์ ์์ ์ผ๋ก return์ ํ๋๋ผ๋ finally ์ ์ ์คํ๋๋ค.
}
catch (DivideByZeroException e)
{
WriteLine("Divide() ์์ธ ๋ฐ์");
throw e; //์์ธ๊ฐ ์ผ์ด๋๋๋ผ๋ finally ์ ์ ์คํ๋๋ค.
}
finally
{
WriteLine("Divide() ๋");
}
}
static void Main(string[] args)
{
try
{
WriteLine("์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
String temp = ReadLine();
int dividend = Convert.ToInt32(temp);
WriteLine("ํผ์ ์๋ฅผ ์
๋ ฅํ์ธ์ : ");
temp = ReadLine();
int divisor = Convert.ToInt32(temp);
WriteLine($"{dividend}/{divisor}={Divide(dividend,divisor)}");
}
catch(FormatException e)
{
WriteLine("์๋ฌ : " + e.Message);
}
catch(DivideByZeroException e)
{
WriteLine("์๋ฌ : "+ e.Message);
}
finally
{
WriteLine("ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค.");
}
}
}
}
<์ถ๋ ฅ์1>
์ ์๋ฅผ ์
๋ ฅํ์ธ์ :
10
ํผ์ ์๋ฅผ ์
๋ ฅํ์ธ์ :
2
Divide() ์์
Divide() ๋
10/2=5
ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค.
<์ถ๋ ฅ์2>
์ ์๋ฅผ ์
๋ ฅํ์ธ์ :
40
ํผ์ ์๋ฅผ ์
๋ ฅํ์ธ์ :
์ญ
์๋ฌ : ์
๋ ฅ ๋ฌธ์์ด์ ํ์์ด ์๋ชป๋์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค.
<์ถ๋ ฅ์3>
์ ์๋ฅผ ์
๋ ฅํ์ธ์ :
40
ํผ์ ์๋ฅผ ์
๋ ฅํ์ธ์ :
0
Divide() ์์
Divide() ์์ธ ๋ฐ์
Divide() ๋
์๋ฌ : 0์ผ๋ก ๋๋๋ ค ํ์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค.
finally ์์์ ์์ธ๊ฐ ๋ ์ผ์ด๋๋ฉด?
finally ๋ธ๋ก์์ ์์ธ๊ฐ ์ผ์ด๋๋ฉด ๋ฐ์์ฃผ๊ฑฐ๋ ์ฒ๋ฆฌํด์ฃผ๋ ์ฝ๋๊ฐ ์์ผ๋ฏ๋ก ์ด ์์ธ๋ '์ฒ๋ฆฌ๋์ง ์์ ์์ธ'๊ฐ ๋๋ค. ์ฝ๋ค๋ฅด ๋ฉด๋ฐํ ์ดํด ์์ธ๊ฐ ์ผ์ด๋์ง ์๋๋ก ํ๊ฑฐ๋ ํ์ฌ ์์ค์ ์ฝ๋์์ ์์ธ๊ฐ ์ผ์ด๋ ๊ฐ๋ฅ์ฑ์ ์์ ํ ๋ฐฐ์ ํ ์ ์๋ค๋ฉด ์ด ์์์ ๋ค์ ํ๋ฒ try~catch ์ ์ ์ฌ์ฉํ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ด๋ค.
'C# > ์ด๊ฒ์ด C#์ด๋ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๋ฆฌ์์ ์ด๋ฒคํธ(2) (0) | 2022.11.30 |
---|---|
๋๋ฆฌ์์ ์ต๋ช ๋ฉ์๋(1) (0) | 2022.11.28 |
์์ธ ์ฒ๋ฆฌํ๊ธฐ(3) ์์ธ ๋์ง๊ธฐ (0) | 2022.04.17 |
์์ธ ์ฒ๋ฆฌํ๊ธฐ(2) System.Exception ํด๋์ค (0) | 2022.04.17 |
60. ์์ธ ์ฒ๋ฆฌํ๊ธฐ(1) (0) | 2022.04.09 |