๋ชฉํ
์๋ฐ์ ์์ธ ์ฒ๋ฆฌ์ ๋ํด ํ์ตํ์ธ์.
ํ์ตํ ๊ฒ (ํ์)
- Exception๊ณผ Error์ ์ฐจ์ด๋?
- ์๋ฐ๊ฐ ์ ๊ณตํ๋ ์์ธ ๊ณ์ธต ๊ตฌ์กฐ
- RuntimeException๊ณผ RE๊ฐ ์๋ ๊ฒ์ ์ฐจ์ด๋?
- ์๋ฐ์์ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ (try, catch, throw, throws, finally)
- ์ปค์คํ ํ ์์ธ ๋ง๋๋ ๋ฐฉ๋ฒ
Exception๊ณผ Error์ ์ฐจ์ด๋ ?
java.lang.Object -> Throwable -> Exception, Error
Error : JVM์ ๋ฌธ์ (OutOfMemoryError, StackOverFlowError ์ ๊ฐ์ด ๋ฐ์ ์ ๋ณต๊ตฌํ ์ ์๋ ์ฌ๊ฐํ ์ค๋ฅ) ๊ฐ ์๊ธด ๊ฒ์ ์๋ฏธํ๋ค.
- ์ปดํ์ผ ์๋ฌ : ์ปดํ์ผ ์์ ์ ๋ฐ์ํ๋ ์๋ฌ์ด๋ค. ์ปดํ์ผ๋ฌ๊ฐ ๋ฌธ๋ฒ ๊ฒ์ฌ๋ฅผ ํตํด ์๋ฌ๋ฅผ ์ก์์ฃผ๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.
- ๋ ผ๋ฆฌ์ ์๋ฌ : ์ฝ๋๋ ์ค๋ฅ ์์ด ์ปดํ์ผ ๋ฐ ์คํ๋์ง๋ง, ์์ ๊ฒฐ๊ณผ๊ฐ ์์๊ณผ ๋ค๋ฅผ ๊ฒฝ์ฐ
- ๋ฐํ์ ์๋ฌ : ์ปดํ์ผ ์๋ฌ๊ฐ ์์ด ์คํ๋๋๋ผ๋, ์คํ ๊ณผ์ (runtime)์์ ๋ฐ์ํ๋ ์๋ฌ์ด๋ค.
- ๋ฐํ์ ์๋ฌ๋ฅผ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์๋๋ฐ
- Error : ์์คํ ์ ๋ญ๊ฐ ๋น์ ์์ ์ธ ์ํฉ์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ์ด๋ค. OutOfMemoryError๋ ThreadDeath ๊ฐ์ ์๋ฌ๋ค์ด ์๋ค. ์ด๋ฐ ์๋ฌ๋ค์ catch๋ธ๋ก์ผ๋ก ์ก์๋ดค์ ์๋ฌด๋ฐ ๋์ ๋ฐฉ๋ฒ์ด ์๊ณ , ์ก์ผ๋ ค๊ณ ๋ ํ๋ฉด ์ ๋๋ค.
- Exception : ๊ฐ๋ฐ์๋ค์ด ๋ง๋ ์ฝ๋์ ์์ ์ค์ ์์ธ์ํฉ์ด ๋ฐ์ํ์ ๊ฒฝ์ฐ์ด๋ค. ์ด ๊ฒฝ์ฐ์๋ catch ๋ธ๋ก์ผ๋ก ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ฉด ๋๋ค.
- ๋ฐํ์ ์๋ฌ๋ฅผ ๋ ๊ฐ์ง๋ก ๋๋ ์ ์๋๋ฐ
Exception ์ RuntimeException์ ๊ธฐ์ค์ผ๋ก ๋ ๊ฐ์ง๋ก ๊ตฌ๋ถํ๋ค.
- Checked Exception : RuntimeException์ ์ ์ธํ ๋ชจ๋ ํด๋์ค
- Unchecked Exception : RuntimeException๊ณผ ๋ชจ๋ ์์ ํด๋์ค
Checked Exception | Unchecked Exception | |
์ฒ๋ฆฌ์ฌ๋ถ | ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ | ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ |
ํ์ธ์์ | ์ปดํ์ผ ๋จ๊ณ | ์คํ ๋จ๊ณ |
๋ํ ์์ธ | RuntimeException์ ์ ์ธํ ๋ชจ๋ ์์ธ - IOException - SQLException ... |
RuntimeException ํ์ ์์ธ - NullPointerException - IllegalStateException ... |
์๋ฐ์์ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ (try, catch, throw, throws, finally)
์์ธ๋?
๋์ด๋ฅผ ์ ๋ ฅํ๋ผ๊ณ ํ๋๋ฐ, 0๋ณด๋ค ์์ ๊ฐ์ด ์ ๋ ฅ๋์๋ค.
๋๋์ ์ ์ํ ๋ ๊ฐ์ ์ ์๋ฅผ ์ ๋ ฅํ๋ผ๊ณ ํ๋๋ฐ, ์ ์(๋๋๋ ์)๋ฅผ 0์ด ์ ๋ ฅ๋์๋ค.
try ~ catch ๋ฌธ
// ์์ธ๊ฐ ๋ฐ์ ๊ฐ๋ฅํ ๋ถ๋ถ์ ๊ฐ์ผ๋ค.
try
{
System.out.println("๋๋๊ธฐ ์์");
System.out.println("๋๋์
๊ฒฐ๊ณผ์ ๋ชซ : " + (num1 / num2)); // (1) ์์ธ ๋ฐ์!
System.out.println("๋๋์
๊ฒฐ๊ณผ์ ๋๋จธ์ง : " + (num1 % num2)); // (2)
}
// ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์ฒ๋ฆฌ๋๋ ์ฝ๋
catch(ArithmeticException e)
{
System.out.println("ArithmeticException ๋ฐ์! 0์ด ์
๋ ฅ๋์์ต๋๋ค.");
}
// ์์ธ์ฒ๋ฆฌ๊ฐ ๋๋๊ณ ๋์ ์ฒ๋ฆฌ
System.out.println("ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค.");
// ์คํ๊ฒฐ๊ณผ
๋๋๊ธฐ ์์
ArithmeticException ๋ฐ์! 0์ด ์
๋ ฅ๋์์ต๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค.
์ ๋ฆฌ
- try๋ ์์ธ๋ฐ์์ ๊ฐ์ง ๋์์ ๊ฐ์ธ๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
- try ๋ฌธ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด, (1) ์์ธ๋ฐ์ํ๋ฉด , (2) ๋ ์คํ๋์ง ์๋๋ค.
- catch๋ ๋ฐ์ํ ์์ธ์ํฉ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. (์์ธ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด -> catch๋ฌธ ์คํ X)
์ฌ๋ฌ ๊ฐ์ catch ๋ฌธ
catch ๋ฌธ์ ์ฌ๋ฌ ๊ฐ๋ก ์์ฑํ ์ ์๋ค.
(์ฃผ์ ์ฌํญ) ์์ธ ํด๋์ค์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ํํ ์๊ณ ๋ ํ ์ฌ์ฉํด๋ผ.
์์์ Exception(RuntimeException์ ๋ถ๋ชจ ํด๋์ค)์๊ฒ ๋ค ์กํ๋ฒ๋ฆฌ๋๊น, ๋ฐ์ ์๋ RuntimeException์ ๋๋ฌํ์ง ๋ชปํ๋ ์ง์ฐ๋ผ๊ณ ์ปดํ์ผ๋ฌ๊ฐ ์๋ ค์ฃผ๊ณ ์๋ค.
(์ฌ๋ฐ๋ฅธ ํํ) ๋ฒ์๊ฐ ์์ ์์์์ ํฐ ์์๋ก ์์ฑํ๋ค.
์๋ฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฐธ๊ณ ํ์ฌ, ๋ฒ์๊ฐ ์์ ์์ผ๋ก catch๋ฌธ์ ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ ์ผ ๋ง์ง๋ง catch๋ฌธ์ ์ต์์ ํด๋์ค์ธ Exception์ผ๋ก ๋ง๋ฌด๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋๊ฐ?
NO, try๋ฌธ์ ์๋ ์ฝ๋๊ฐ ์ด๋ค ์์ธ๋ฅผ ๋์ง๋์ง ํ์ ํ ํ ๊ทธ ํด๋์ค์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ค์ ํด ์ค๋ค. ๋ง์ง๋ง์ Exception์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๋ ์ ๋ณด์ง ๋ชปํ๋ค.
๋ฉํฐ catch ๋ฌธ
Java 7 ์ดํ ๋ถํฐ๋ ์ฌ๋ฌ ๊ฐ์ Exception์ ํ๋์ catch ๋ฌธ์ '|' ์ผ๋ก ํฉ์น ์ ์๋ค.
์๋ก ๋ค๋ฅธ ์์ธ๊ฐ ๋ฐ์ํ์ ๋, ์ฒ๋ฆฌํ๋ ๋ก์ง์ด ๊ฐ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ ๋๋ค.
- ์ฃผ์ ์ฌํญ
- ๋ถ๋ชจ / ์์ ๊ด๊ณ์ ์๋ ์์ธ ํด๋์ค๋ฅผ ๋์์ ์์ฑ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- (์) NullPointerException extends RuntimeException
- ๋ถ๋ชจ / ์์ ๊ด๊ณ์ ์๋ ์์ธ ํด๋์ค๋ฅผ ๋์์ ์์ฑ์ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
// ์คํ ๊ฒฐ๊ณผ
class java.lang.IllegalStateException
finally
- try ~ catch ๊ฐ ์คํ๋๊ณ ๋ ๋ค, ํญ์ ์คํ๋๋ค.
- ์์ธ๊ฐ ๋ฐ์ ํ์ง ์์๋ ์คํ๋๋ค.
try
{
System.out.println(1 / 0); // ์์ธ ๋ฐ์!
}
catch (ArithmeticException e)
{
System.out.println("์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋");
}
finally
{
System.out.println("์ด ๋ฌธ์ฅ์ ๋ง์ง๋ง์ ๊ผญ! ์ถ๋ ฅ๋ฉ๋๋ค.");
}
// ์คํ ๊ฒฐ๊ณผ
์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋
์ด ๋ฌธ์ฅ์ ๋ง์ง๋ง์ ๊ผญ! ์ถ๋ ฅ๋ฉ๋๋ค.
์์ธ์ฒ๋ฆฌ ๋ฐฉ๋ฒ (ํ ๋น์ ์คํ๋ง vol.3 - p.285)
1. ์์ธ ๋ณต๊ตฌ
์์ธ๋ก ์ธํด ๊ธฐ๋ณธ ์์ ํ๋ฆ์ด ๋ถ๊ฐ๋ฅํ๋ฉด ๋ค๋ฅธ ์์ ํ๋ฆ์ผ๋ก ์์ฐ์ค๋ฝ๊ฒ ์ ๋ํด์ฃผ๋ ๊ฒ์ด๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ์์ฒญํ ํ์ผ์ ์ฝ์ผ๋ ค๊ณ ์๋ํ๋๋ฐ ํด๋น ํ์ผ์ด ์๋ค๊ฑฐ๋, ์ฝํ์ง ์์ ๊ฒฝ์ฐ ์ฌ์ฉ์์๊ฒ ์ํฉ์ ์๋ ค์ฃผ๊ณ ๋ค๋ฅธ ํ์ผ๋ก ์๋ํ๋๋ก ์ ๋ํ์ฌ ์์ธ์ํฉ์ ํด๊ฒฐํ ์ ์๋ค.
๋จ, ์ฌ์ฉ์์๊ฒ ์๋ฌ ๋ฉ์ธ์ง๋ง ๋์ ธ์ง๋ ๊ฒ์ ์์ธ๋ณต๊ตฌ๋ผ๊ณ ํ ์ ์๋ค.
์ ์ฝ๋๋ ๋คํธ์ํฌ๊ฐ ๋ถ์ํด์ ์๊ฒฉ DB์ ์ ์์ ์คํจํด์ SQLException์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ์
์ต๋ ์๋ ํ์๋ฅผ ์ ํด๋๊ณ , ์ผ์ ์๊ฐ ๊ธฐ๋ค๋ ธ๋ค๊ฐ ๋ค์ ์ฌ์ ์ํด๋ณด๋ฉด์ ์์ธ์ํฉ์ ํด๊ฒฐํ ์ ์๋ค.
๋ฌผ๋ก ์ต๋ ํ์ ์ฌ์๋ํ๋ฉด์ ์คํจํ ๊ฒฝ์ฐ๋ ์์ธ๋ณต๊ตฌ๋ฅผ ํฌ๊ธฐํ๊ณ ์์ธ๋ฅผ ๋์ ธ์ค์ผ ํ๋ค.
2. ์์ธ์ฒ๋ฆฌ ํํผ (throws)
์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์์ ์ด ์์ธ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ์ง ์๊ณ , thorws๋ฅผ ํตํด ํธ์ถํ ์ชฝ์ผ๋ก ์์ธ๋ฅผ ๋์ง๊ณ ๊ทธ ์์ธ์ฒ๋ฆฌ๋ฅผ ํํผํ๋ ๊ฒ์ด๋ค.
์ด๋ค.
์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด, 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์ถ์ฒํด์ค๋ค.
- throws๋ก ํธ์ถํ ์ชฝ์ผ๋ก ์์ธ๋ฅผ ์ ํ์ํฌ ๊ฒ์ธ์ง
- try - catch๋ก ๊ฐ์ ๊ฒ์ธ์ง
๋ฌด์ฑ ์ํ๊ฒ ๋์ง๋ฉด ์๋๊ณ , ํ์ฌ ๋ฉ์๋์์ ์ด ์์ธ๋ฅผ ๋์ง๋ ๊ฒ์ด ์ต์ ์ ๋ฐฉ๋ฒ์ด๋ผ๋ ํ์ ์ด ์์ ๋๋ง ์ฌ์ฉํด์ผ ํ๋ค.
Unchecked Exception์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์๊ธฐ ๋๋ฌธ์, throws๋ฅผ ๋ช ์ ํ์ง ์์๋ ๋๋ค.
// ์คํ๊ฒฐ๊ณผ
Exception is handled here
Continue with normal Flow...
Checked Exception์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์, thorws๋ฅผ ๋ช ์ํด์ค์ผ ํ๋ค. (๋๋ try-catch๋ก ์์ธ์ฒ๋ฆฌ)
System.in.read(); ๋ IOException์ ๋์ง๋ค. IOException์ Checked Exception ํด๋์ค ์ด๋ฏ๋ก throwsํ๊ฑฐ๋, ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ค.
3. ์์ธ ์ ํ
์์ธ ํํผ์ ๋น์ทํ๊ฒ ์์ธ๋ฅผ ๋ณต๊ตฌํด์ ์ ์์ ์ธ ์ํ๋ก ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์์ธ๋ฅผ ๋ฉ์๋ ๋ฐ์ผ๋ก ๋์ง๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์์ธ ํํผ์ ๋ฌ๋ฆฌ ๋ฐ์ํ ์์ธ๋ฅผ ๊ทธ๋๋ก ๋๊ธฐ๋ ๊ฒ ์๋๋ผ, ์ ์ ํ ์์ธ๋ก ์ ํํด์ ๋์ง๋ค๋ ํน์ง์ด ์๋ค.
๋ง์ฝ ํ์๊ฐ์ ํ ๋, ์ฌ์ฉ์๊ฐ ์ค๋ณต ์์ด๋๋ฅผ ์ ๋ ฅํด์ DB ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด SQLException์ด ๋ฐ์ํ ๊ฒ์ด๋ค.
์ด ๊ฒฝ์ฐ SQLException์ ๋ฐ์ผ๋ก ๋์ ธ๋ฒ๋ฆฌ๋ฉด, ์ SQLException์ด ๋ฐ์ํ๋์ง ์ ๋ฐฉ๋ฒ์ด ์๋ค. ์ง๊ธ์ฒ๋ผ ์ค๋ณต๋ ์์ด๋๋ฅผ ์ ๋ ฅํ ๊ฒฝ์ฐ์๋ DuplicateUserIDException ๊ฐ์ ์๋ฏธ๊ฐ ๋ถ๋ช ํ ์์ธ๋ก ๋ฐ๊ฟ ๋์ ธ์ฃผ๊ฒ ๋๋ฉด, ํจ์ฌ ๋ ์์ํ ๋ณต๊ตฌ ์์ ์ ์๋ํ ์๊ฐ ์๋ค.
public void add(User user) throws DulpicateUserIDException, SQLException {
try {
// ์์ธ ๋ฐ์
}
catch (SQLException e) {
if /* ๋ง์ฝ ์ค๋ณต ์์ด๋์ ์
๋ ฅํ ๊ฒฝ์ฐ */ {
throw new DuplicateUserIdException();
}
else {
throw e; // ๋๋จธ์ง ๊ฒฝ์ฐ๋ SQLException ๊ทธ๋๋ก
}
}
}
try - with - resource
- java 7 ์ดํ๋ถํฐ, ์์ธ ๋ฐ์ ์ ์๋์ผ๋ก close()๋ฅผ ํด์ค๋ค.
- ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ ๋ฐ๋์ AutoClosable์ ๊ตฌํํ ๊ฐ์ฒด์ด์ด์ผ ํ๋ค.
try - with - resource ์ฌ์ฉํ๊ธฐ ์
try - with - resource ์ฌ์ฉ ํ
์ด์ ์ try - catch ์ฝ๋๋ณด๋ค try - with - resource๋ฅผ ์ ์ฉ ํ๊ณ ๋๋ ์ฝ๋๊ฐ ํจ์ฌ ๊น๋ํ๊ฒ ๋ฐ๋์๋ค.
์๋ฐ์์ ์ ๊ณตํ๋ ์์ธ ํด๋์ค
java exception hierarchy (์๋ฐ ์์ธ ๊ณ์ธต)
๊ฐ๋จํ๊ฒ ์๋ฐ์์ ์ ๊ณตํ๋ ๋ํ์ ์ธ ์์ธ ํด๋์ค๋ฅผ ๋ช๊ฐ์ง๋ง ์ดํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Checked Exception
checked Exception์ด๊ธฐ ๋๋ฌธ์, throws๋ก ๋์ ธ๋ฒ๋ฆฌ๊ฑฐ๋ ์์ธ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ค.
1. ๐ [ReflectiveOperationException] ClassNotFoundException | NoSuchMethodException
ํด๋์ค, ๋ฉ์๋๊ฐ ์กด์ฌํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ผญ ํด์ค์ผ ํ๋ค.
2. IOException
์ ์ถ๋ ฅ์ด ์คํจํ๊ฑฐ๋ ์ค๋จ๋ ๋ ์์ธ๊ฐ ๋ฐ์ํ๋ค.
3. ๐ [IOException] FileNotFoundException
[RuntimeException ์์ ํด๋์ค] Unchecked Exception
1. ๐ NullPointerException
null์ธ ๊ฐ์ฒด์ ๋ฉค๋ฒ์ ์ ๊ทผํ๊ฒ ๋๋ฉด? -> NullPointerException์ด ๋ฐ์ํ๋ค.
2. ArithmeticException
๋๋์ ์ ํ ๋, ์ ์(๋๋๋ ์)๋ฅผ 0์ผ๋ก ๋ฃ์ผ๋ฉด ArithmeticException์ด ๋ฐ์ํ๋ค.
3. [IllegalArgumentException] NumberFormatException
๋ถ์ ์ ํ ๋ฌธ์์ด์ ์ซ์ํ์ผ๋ก ๋ณํํ ๋, NumberFormatException์ด ๋ฐ์ํ๋ค.
4. ๐ IndexOutOfBoundsException
๋ฆฌ์คํธ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ธ๋ฑ์ค์ ์ ๊ทผํ ๋ ๋ฐ์ํ๋ ์์ธ์ด๋ค.
์ปค์คํ ํ ์์ธ ๋ง๋๋ ๋ฐฉ๋ฒ
Main.java
public class Main {
public static void main(String[] args) throws AgeException {
setAge(-1); // ๋์ด์ -1์ ์
๋ ฅ
}
private static void setAge(int age) throws AgeException {
if (age < 0) {
throw new AgeException("๋์ด๋ฅผ ๋ค์ ์
๋ ฅํ์ธ์.");
}
}
}
AgeException.java
public class AgeException extends Exception{
public AgeException() {
}
public AgeException(String message) {
super(message);
}
}
์คํ ๊ฒฐ๊ณผ
Exception in thread "main" week9.AgeException: ๋์ด๋ฅผ ๋ค์ ์
๋ ฅํ์ธ์.
at week9.Main.setAge(Main.java:11)
at week9.Main.main(Main.java:6)
์ปค์คํ ์์ธ ๋ง๋ค๊ธฐ ์ ๋ฆฌ
Checked Exception์ ๊ตฌํํ ๋๋ Exception ์ ํ์ฅ
Unchecked Exception์ ๊ตฌํํ ๋๋ RuntimeException ์ ํ์ฅ.
์ถ๊ฐ์ ์ผ๋ก 4๊ฐ์ง Best Practices๋ฅผ ๋ฐ๋ฅด๋ ๊ฒ์ด ์ข๋ค.
- Java ํ์ค ์์ธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ์์ฑํ Custom ์์ธ๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ ๋ง์ ์ด์ต์ ์ป๋๋ค๊ณ ์๊ฐํ ๊ฒฝ์ฐ์๋ง Custom Exception์ ๊ตฌํํ์.
- ์์ฑํ Custom Exception ํด๋์ค์ ์ด๋ฆ์ ๋์ "Exception"์ผ๋ก ๋๋๋๋ก ํ์.
- API ๋ฉ์๋๊ฐ ์ด๋ค ํ๋์ ์์ธ๋ฅผ ๊ธฐ์ ํ๊ณ ์๋ค๋ฉด, ๊ทธ ์์ธ๋ API์ ํ ๋ถ๋ถ์ด ๋๋ ๊ฒ์ด๋ฉฐ ๊ทธ ์์ธ๋ฅผ ๋ฌธ์ํ ํด์ผ ํ๋ค.
- ์์ธ์ Cause ๋ฅผ ์ค์ ํ ์ ์๋ ์์ฑ์๋ฅผ ์ ๊ณตํด์ผ ํ๋ค.
REFERENCES
madplay.github.io/post/java-checked-unchecked-exceptions
linked2ev.github.io/java/2019/05/05/JAVA-5.-compileError-vs-RuntimeError/