๊ตญ๋น์ง์ D+59
- ์๋ฐํ๋ก๊ทธ๋๋ฐ5 -
• ์์ธ๋? (Exception)
- ํ๋ก๊ทธ๋จ์ ์คํ์ ์ฌ์ฉ์ ๋๋ ์์คํ ์ ๋ฌธ์ ๋ก ์ธํด ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ์ง ๋ชปํ๋ ๋น์ ์์ ์ํฉ
- ์ฝ๋์ ๋ฌธ์ ๊ฐ ์๋๋ผ Run-time์ ๋ฐ์ํ๋ ๋น์ ์์ ์ํฉ
- ์์ธ๋ H/W์ ์ฒ๋ฆฌ๋ฐฉ์๊ณผ S/W์ ์ฒ๋ฆฌ๋ฐฉ์์ด ์์ผ๋ JVM์ ๊ฒฝ์ฐ ๋ณ๋๋ก ์ฒ๋ฆฌ ๋ก์ง์ด ์กด์ฌํ์ง ์๋ํ ์ข ๋ฃ ์ฒ๋ฆฌํ๋ค. => ๋์ด์ JAVA์คํ ์ฝ๋์ ๋ฌด๊ฒฐ์ฑ์ ์งํฌ ์ ์๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์ด๋ค.
• ์์ธ์ ์ข ๋ฅ
- java.lang.ArithmeticException : ์ํ ์ฐ์ฐ์ ์์ธ
- java.util.InputMismatchException : Scanner๋ฅผ ํตํ ๊ฐ์ ์ ๋ ฅ ์์ธ
- ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์์ธ ๋ฐ์์ ๋ฐ๋ฅธ ์์ธ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ผ์์ฒ๋ฆฌํ ๊ฒฝ์ฐ JVM์ ๋ฌด๊ฒฐ์ฑ์ด ์ง์ผฐ๋ค๊ณ ๊ฐ์ฃผ๋๋ค.
• ์์ธ ์ฒ๋ฆฌ
try-catch ๋ฌธ
try
{
// ์์ธ ๋ฐ์ ์์ ์์ญ
}
catch (Exception name)
{
// ์์ธ ์ฒ๋ฆฌ ์์ญ
}
// ์์ธ์ฒ๋ฆฌ ์ดํ ์คํ์ง์
- ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฌธ๋ฒ์ผ๋ก try์์ ๋ฐ์ํ ์์ธ๋ฅผ catch์์ญ์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
- ์ด๋ ์ฃผ์ํด์ผํ ๊ฒ์ ์์ธ๊ฐ ๋ฐ์ํด์ ์์ธ๋ฅผ ํด๊ฒฐํ๊ฒ ๋ค๊ฐ ์๋๋ผ ๋ฐ์๋ ์์ธ์ ๋ํด ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
finally
try
{
...
}
catch(Exception e)
{
...
}
finally
{
... // try๊ฐ ์คํ๋๋ฉด ๋ฌด์กฐ๊ฑด ์คํ
}
- try๊ตฌ๋ฌธ์ด ์คํ๋ ๊ฒฝ์ฐ, ์ต์ข ์ ์ผ๋ก ์คํํ ๊ตฌ๋ฌธ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํค์๋ ์ด๋ค.
• ์์ธ์ฒ๋ฆฌ์ ๋ฒ์
์์ธ์ฒ๋ฆฌ์ ๋ฒ์
์์ธ์ฒ๋ฆฌ์ ๋ฒ์๋ try๋ก ๋ธ๋ก์ฒ๋ฆฌ๋ฅผ ํ๋ค.
์ด๋ try๋ธ๋ก์ ๋ฒ์๋ ์๋์ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ฒ๋ฆฌํ๋ค.
try๋ธ๋ก์ ๋ฒ์
1 > ์์ธ๊ฐ ๋ฐ์ํ๋ ์ฝ๋ ๋ฒ์
2 > ์์ธ๊ฐ ๋ฐ์ํ์ ๊ฒฝ์ฐ ์ํฅ์ ๋ฐ๋ ์ฝ๋์ ๋ฒ์
๋ง์ฝ try๋ก ๋ค ๋ฌถ์ด๋ฒ๋ฆฌ๊ฒ ๋๋ฉด JVM์ ๋ช ๋ น์ด ๋น๋ํด์ง๊ณ ๋ฒ๊ฑฐ์์ ธ์ ๋๋ ค์ง๊ฒ ๋๋ฏ๋ก ์ต์ํ์ผ๋ก ๋ถ์ด์ผ ํ๋ค.
๊ทธ๋ ๋ค๊ณ ๋๋ฌด ์ต์ํ์ด ์๋ C์๋ ๋ฌธ์ ๊ฐ ๋ฐ์๋ ์๋ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ๋ ๊ณ ๋ คํด์ฃผ์ด์ ๋ฌถ์ด์ฃผ์ด์ผ ํ๋ค.
์ฐ์ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฌถ๋ ๊ฑฐ์ง ์์ธ๋ณ๋ก ๋ฌถ๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฒ์ ๋ช ์ฌํ๊ธธ ๋ฐ๋๋ค.
๋ ์ด์์ ์์ธ ๋ฐ์
ํ๋์ try๋ธ๋ก์์ ๋ง์ฝ ๋๊ฐ ์ด์์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒฝ์ฐ์ ๊ฐ๊ฐ์ ์์ธ์ ๋ํ catch๋ฌธ์ ์์ฑํ๋๋ก ํ๋ค.
• ์์ธ ๋์ง๊ธฐ
Throwable ํด๋์ค
- ์์ธ ์ฒ๋ฆฌ์ ์ต์์ ํด๋์ค๋ก ๋ชจ๋ ์์ธ์ฒ๋ฆฌ ํด๋์ค๋ Throwable ํด๋์ค๋ฅผ ์์ ๋ฐ๋๋ค.
- getMessage(), printStackTrace() ๋ฑ์ ๊ธฐ๋ฅ๋ Throwable์ ๋ฉ์๋ ์ด๋ค.
- Throwable๋ก ์๋ฌ์ฒ๋ฆฌ๋ฅผ ํ ๋ ์ฃผ์ํด์ผํ ์ ์ ๋ชจ๋ ํด๋์ค์ ์์ธ ํด๋์ค๋ฅผ ๋ฐ์ ์ ์๊ธฐ๋๋ฌธ์ ๋ง์ฝ ์๋จ์ Throwable๋ก ์ฒ๋ฆฌํด์ค ๊ฒฝ์ฐ ๋ค์์ค๋ catch๋ฌธ์ด ๋ฐ๋์ฝ๋๊ฐ ๋์ด๋ฒ๋ฆฌ๋ฏ๋ก ๊ฐ๊ธ์ ์ฌ์ฉ์ ํผํ๋๋ก ํด์ผํ๋ค.
๋ค์ํ ์์ธ ํด๋์ค
- ArrayIndexOutOfBounds : ๋ฐฐ์ด์ ์๋ชป๋ ์ธ๋ฑ์ค ์ ๊ทผ
- ClassCastException : ํ์ฉ ๋ถ๊ฐ๋ฅํ ํ๋ณํ์ ๊ฐ์ ๋ก ์งํ
- NullPointerException : Null์ด ์ ์ฅ๋ ์ฐธ์กฐ๋ณ์์ ์ ๊ทผ
• ์์ธ ์ฒ๋ฆฌ ์ฌํ
์์ธ ํด๋์ค์ ๋ถ๋ฅ
Error
- ๋น๊ฒ์ฌ ์์ธ ํด๋์ค
- ์ดํ๋ฆฌ์ผ์ด์ ์ ์งํ์ด ๋ถ๊ฐ๋ฅํ ์ํ์ด๋ค.
- ์์์ ์์์ด ๋ถ๊ฐํ๋ค.
- VirtualMachineError, IOError
RuntimeException
- ์ผ๋ฐ์ ์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์์ ์์ธ์ฒ๋ฆฌ๋ฅผ ์งํํ ์ ์๋ ํด๋์ค์ด๋ค.
Exception
- ๊ฒ์ฌ ์์ธ ํด๋์ค
- ๊ฒ์ฌ๋ฅผ ํ ์ ์๋ ๊ฒ์ด์ง ํด๊ฒฐ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ค.
java.io.IOException
- try๋ฌธ์ ์ง์๋ณด๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์์ค๋๋๋ฐ ์ด๋ IOException์ ๋ฐ๋๋ฆฌ ๊ฒ์ฌ๋ฅผ ํด์ผํ๋ Exception์์ ์์๋ ์์ธ์ฒ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ try๋ฌธ์ผ๋ก ์ฒ๋ฆฌํด์ค์ผ ํ๋ค.
- ๋ง์ฝ main์ด ์๋ ๋ฉ์๋ ๋ด์์ IOException์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ throws ํค์๋๋ฅผ ํตํด ์์ธ๋ฅผ ๋ช ์์ ์ผ๋ก ํ์ํด์ผํ๋ค.
• ์ฌ์ฉ์ ์ ์ ์์ธ
- Exception์ ์์๋ฐ์ ์ฌ์ฉ์ ์ ์ ์์ธ๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋ค.
- ์ฑ๋ฅ์ ํ, ๊ฐ๋ ์ฑ ์ ํ๋ฅผ ๋ฐ์ํ ์ ์๋ค.
• try-with-resources
์ผ๋ฐ์ ์ผ๋ก file๊ณผ ๊ฐ์ resource๋ Exception์ฒ๋ฆฌ๋ฅผ ๋๋ฐํ๋ค.
์ด๋ก์ธํด finally๊ตฌ๋ฌธ์์ ์ฝ๋๊ฐ ๋ณต์กํด์ง๋ ๋จ์ ์ด ๋ฐ์๋๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด try-with-resources ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
๋๊ธ