โ ์๋ฐ ์์ธ ๋์ง๊ธฐ(throw) & ์์ธ ์ฐ๊ฒฐ(Chained Exception)
์์ธ ๋์ง๊ธฐ
์์ธ ๋ฐ์์ํค๊ธฐ (throw)
๋ง์ผ ํ๋ก๊ทธ๋จ์ ์ผ๋ก ์๋ฌ๊ฐ ์๋๋ผ๋ ๋ก์ง์ ๊ฐ๋ฐ์๊ฐ ์ผ๋ถ๋ฌ ์๋ฌ๋ฅผ ๋ด์ ๋ก๊ทธ์ ๊ธฐ๋กํ๊ณ ์ถ์ ์ํฉ์ด ์ฌ ์ ์๋ค.
์๋ฐ์์๋ throw ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ๋ก ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค.
์๋๋ ํ๋ก๊ทธ๋จ์ด ์์์ ์๋ฌ๋ฅผ ํ์งํ๊ณ ์ฒ๋ฆฌ ํ์์ง๋ง, ์ด๋ฒ์๋ ์ฌ์ฉ์๊ฐ ์ผ๋ถ๋ฌ ์๋ฌ๋ฅผ throwํ์ฌ ์๋ฌ๋ฅผ catch ํ๋ค๋ ๊ฐ๋ ์ผ๋ก ๋ณด๋ฉด ๋๋ค.
์ด๋ new ์์ฑ์๋ก ์์ธ ํด๋์ค๋ฅผ ์ด๊ธฐํํ์ฌ ๋์ ธ๋๋ฐ, ์ด ํด๋์ค ์์ฑ์์ ์
๋ ฅ๊ฐ์ ์ฃผ๊ฒ๋๋ฉด, catch๋ฌธ์ getMessage() ๋ฉ์๋์์ ์ถ๋ ฅํ ๋ฉ์ธ์ง๋ฅผ ์ง์ ํ๊ฒ ๋๋ค.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
Scanner s = new Scanner(System.in);
System.out.print("์์๋ฅผ ์ ์ธํ ์ซ์๋ง ์
๋ ฅํ์ธ์ : ");
int num = s.nextInt(); // ์ฌ์ฉ์๋ก๋ถํฐ ์ ์๋ฅผ ์
๋ ฅ ๋ฐ์
if (num < 0) {
// ๋ง์ผ ์ฌ์ฉ์๊ฐ ๋ง์ ์๋ฃ๊ณ ์์๋ฅผ ์
๋ ฅํ๋ฉด ๊ฐ์ ๋ก ์๋ฌ ๋ฐ์ ์์ผ๋ฒ๋ฆฌ๊ธฐ!!
throw new ArithmeticException("์ ํ์ง๋ง๋ผ๋ ์ง์ ํ์๋ ๊ฑฐ์ฃ ? ใ
กใ
ก"); // ArithmeticException ์์ธ ํด๋์ค ๊ฐ์ฒด๋ฅผ ์์ฑํด catch๋ฌธ์ผ๋ก ๋๊ฒจ๋ฒ๋ฆฐ๋ค๊ณ ์๊ฐํ๋ฉฐ ๋๋ค
}
System.out.println("์์๋ฅผ ์
๋ ฅํ์ง ์์ผ์
จ๊ตฐ์. ๊ฐ์ฌํฉ๋๋ค");
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
} finally {
System.out.println("ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํฉ๋๋ค");
}
}
}
์์ธ ๋ ๋๊ธฐ๊ธฐ (throws)
์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ try - catch ๋ธ๋ก์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ๊ธฐ๋ณธ์ด์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ๋ค๋ฅธ ๊ณณ์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํธ์ถํ ๊ณณ์ผ๋ก ์์ธ๋ฅผ ๋ ๋๊ธธ ์๋ ์๋ค.
์ด๋ ์ฌ์ฉํ๋ ํค์๋๊ฐ throws์ด๋ค. throws ๋ ๋ฉ์๋ ์ ์ธ๋ถ ๋์ ์์ฑ๋์ด ๋ฉ์๋์์ ์์ธ๋ฅผ ์ง์ ์ฒ๋ฆฌ(catch)ํ์ง ์์ ์์ธ๋ฅผ ํธ์ถํ ๊ณณ์ผ๋ก ๋ ๋๊ธฐ๋ ์ญํ ์ ํ๋ค.
์์ธ๋ฅผ ๋ฐ์์ํค๋ ํค์๋๋throw๊ณ ์์ธ๋ฅผ ๋ฉ์๋์ ์ ์ธํ๋ ํค์๋๋throws์ด๋ค.
์๋ฅผ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋ 3๊ฐ๊ฐ ์๊ณ ๊ฐ ๋ฉ์๋ ๋ง๋ค ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํด try - catch ๋ธ๋ก์ผ๋ก ์ผ์ผํ ๊ฐ์ธ์ฃผ์๋ค.
public class Main {
public static void main(String[] args) {
method1();
method2();
method3();
}
public static void method1() {
try {
throw new ClassNotFoundException("์๋ฌ์ด์ง๋กฑ");
} catch (ClassNotFoundException e) {
System.out.println(e.getMessage());
}
}
public static void method2() {
try {
throw new ArithmeticException("์๋ฌ์ด์ง๋กฑ");
} catch (ArithmeticException e) {
System.out.println(e.getMessage());
}
}
public static void method3() {
try {
throw new NullPointerException("์๋ฌ์ด์ง๋กฑ");
} catch (NullPointerException e) {
System.out.println(e.getMessage());
}
}
}
ํ์ง๋ง ๊ดํ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ๊ฐ๋ ์ฑ๋ ๊ทธ๋ ๊ฒ ์ข์ง๊ฐ ์์ ๋ณด์ธ๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋ ์ ์ธ ์ฝ๋ ์ค๋ฅธ์ชฝ์ throws ์์ธํด๋์ค๋ช
์ ๊ธฐ์ฌํด์ฃผ๋ฉด, ๋ง์ผ ํด๋น ๋ฉ์๋ ์์์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ try - catch ๋ฌธ์ด ์์ผ๋ฉด ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ ์์ ์คํ ๋ฉ์๋๋ก ๊ฐ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๋ค.
void method() throws Exception, Exception2, ... {
์๋ฌ๋ฐ์์ฝ๋; // ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ชฝ์ผ๋ก ์ฌ๋ผ๊ฐ๋ค.
}
public class Main {
public static void main(String[] args) {
try {
method1();
method2();
method3();
} catch (ClassNotFoundException | ArithmeticException | NullPointerException e) {
System.out.println(e.getMessage());
}
}
public static void method1() throws ClassNotFoundException {
throw new ClassNotFoundException("์๋ฌ์ด์ง๋กฑ");
}
public static void method2() throws ArithmeticException {
throw new ArithmeticException("์๋ฌ์ด์ง๋กฑ");
}
public static void method3() throws NullPointerException {
throw new NullPointerException("์๋ฌ์ด์ง๋กฑ");
}
}
์ฆ, ์์ธํด๋์ค๋ฅผ ๋ฉ์๋์ throws์ ๋ช
์ํ๋ ๊ฒ์ ์ด๊ณณ์์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ์์ ์ ํธ์ถํ ๋ฉ์๋์๊ฒ ์์ธ๋ฅผ ์ ๋ฌํ์ฌ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ ๋งก๊ธฐ๋ ๊ฒ์ด๋ค. ๋ํ ์์ธ๋ฅผ ์ ๋ฌ๋ฐ์ ๋ฉ์๋๊ฐ ๋๋ค์ ์์ ์ ํธ์ถํ ๋ฉ์๋์๊ฒ ์ ๋ฌํ ์ ์๋ค. ์ด๋ฐ ์์ผ๋ก ๊ณ์ ํธ์ถ ์คํ์ ์๋ ๋ฉ์๋๋ค์ ๋ฐ๋ผ ์ ๋ฌ๋๋ค๊ฐ, ์ ์ผ ๋ง์ง๋ง์ ์๋ main ๋ฉ์๋์์ throws๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์๋จธ์ ์์ ์ฒ๋ฆฌ๋๋ค.
์์ธ ๋ฐ์๊ณผ ์ฝ๋์ ํธ๋์ญ์
ํธ๋์ญ์ (Transaction)์ ํ๋์ ์์ ๋จ์๋ฅผ ๋ปํ๋ค.
์ฆ, ์๋ฐ ์ฝ๋์์ ๋ฉ์๋ ๋ธ๋ญ๋ด์ ์ฝ๋๋ค์ด ์์ธ๊ฐ ๋ฐ์ํด๋ ๋ชจ๋ ์คํ๋๋๋ ์๋๋ฉด ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ์ํ๋ก ์ค์งํ๋๋์ ์์ ๋จ์๋ฅผ ๊ฐ๋ฐ์๊ฐ ์ด๋ค ํํ์ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ฒ ๋๋ค.
์๋ฅผ๋ค์ด ๊ฐ ๋ฉ์๋์์ ์ผ์ผํ try - catch ํ๋ฉด, ๋ฉ์ธ ๋ฉ์๋์ ์๋ ๋ฉ์๋ ์คํ ์ฝ๋ ๋ถ๋ถ์ 3๊ฐ ๋ชจ๋ ์คํ ์์ฒด๋ ๋๋ค.
์๋ํ๋ฉด ์์ธ์ฒ๋ฆฌ๋ฅผ ๊ฐ ๋ฉ์๋์์ ํ๊ธฐ ๋๋ฌธ์ ์์์ ๋ฉ์ธ ๋ฉ์๋์ ์ฝ๋๋ค์ ๋ชจ๋ ์คํ๋๊ฒ ๋๋ค.
๋ฐ๋ฉด์ throws๋ฅผ ํตํด ์์ธ์ฒ๋ฆฌ๋ฅผ ์์ ๋ฉ์๋์์ ๋ชจ์ ์ฒ๋ฆฌ๋ฅผ ํ๋ค๋ฉด, ์ฝ๋ ์ด๋ ํ๊ณณ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ๋ค์ ๋๋จธ์ง ์ฝ๋๋ค์ ๋น์ฐํ ์คํ๋์ง ์๊ฒ ๋๋ค. (๋ฐ๋ก catch๋ก ์ ํํ๋๊น)
์ด์ฒ๋ผ try - catch ๋ฌธ์ ์ด๋์ ์ฌ์ฉํ๋ ์ด๋์ throws ํ๋๋์ ๋ฐ๋ผ ์๋ฐ ์ฝ๋์ ์์ ๋จ์(ํธ๋์ญ์ )๊ฐ ์์ ํ ๋ฌ๋ผ์ง ์ ์๊ฒ ๋๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์์ ์ ํ๋ก์ ํธ์ ๋ฐ๋ผ ์ ์ ํ ์์ธ ์ฒ๋ฆฌ ๋ก์ง์ ์ง ์ฃผ์ด์ผ ํ๋ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ์ผ ํ๋ค.
์ฐ๊ฒฐ๋ ์์ธ (Chained Exception)
์์ธ๋ฅผ ๋ค๋ฅธ ์์ธ๋ก ๊ฐ์ธ ๋์ง๊ธฐ
์ฐ๊ฒฐ๋ ์์ธ(chained exception)๋ ํ ์์ธ๊ฐ ๋ค๋ฅธ ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
์ฐ๋ฆฌ๊ฐ ํด๋์ค๋ฅผ ์์ํ์ฌ ๋คํ์ฑ์ ์ด์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค ํ์ ์ผ๋ก ๋ค๋ค์จ ๊ฒ ์ฒ๋ผ, ์์ธ๋ ๋ง์น ๋ถ๋ชจ ์์ธ๋ก ๊ฐ์ธ์ ๋ณด๋ด ๋ง์น ์์ธ์ ๋คํ์ฑ ์ฒ๋ผ ๋ค๋ฃฐ ์ ์๋ค.
์๋ฅผ ๋ค์ด ์์ธ A๊ฐ ๋ฐ์ํ๋ค๋ฉด ์ด๋ฅผ ์์ธ B๋ก ๊ฐ์ธ์ throwํ๋ ์์ผ๋ก, ๋ง์น ์์ธ๋ฅผ ๋ค๋ฅธ ์์ธ๋ก ๊ฐ์ธ์ ๋์ง๋ค๊ณ ๋ณด๋ฉด๋๋ค. ๊ทธ๋์ ์์ธ A๊ฐ ์์ธ B๋ฅผ ๋ฐ์์์ผฐ๋ค๋ฉด, A๋ฅผ B์ '์์ธ ์์ธ(cause exception)'๋ผ๊ณ ํ๋ค.
Exception ํด๋์ค๊ฐ ์์ํ๊ณ ์๋ Throwable ํด๋์ค์๋ getMessage() ์ printStackTrace() ์ด์ธ์๋ chained exception์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ค์ ๋ฉ์๋๋ฅผ ์ง์ํ๋ค.
Throwable initCause (Throwable cause): ์ง์ ํ ์์ธ๋ฅผ ์์ธ ์์ธ๋ก ๋ฑ๋กThrowable getCause(): ์์ธ ์์ธ๋ฅผ ๋ฐํ
์ด ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์์ธ๋ฅผ ๋ค๋ฅธ ์์ธ๋ก ํฌ์ฅํด ๋์ง์ ์๊ฒ ๋๋ค.
๋น์ฐํ Exception ํด๋์ค์ ๋ถ๋ชจ์ธ Throwable ํด๋์ค์ ์ ์๋์ด์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ์์ธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
๋ค์ ์๋ ์์ ์ฝ๋๋ฅผ ๋ณด์.
class InstallException extends Exception { ... }
class SpaceException extends Exception { ... }
class MemoryException extends Exception { ... }
public class Main {
public static void main(String[] args) {
try {
install();
} catch (InstallException e) {
System.out.println("์์ธ ์์ธ : " + e.getCause()); // ์์ธ ์์ธ ์ถ๋ ฅ
e.printStackTrace();
}
}
public static void install() throws InstallException {
try {
throw new SpaceException("์ค์นํ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๋ค."); // SpaceException ๋ฐ์
} catch (SpaceException e) {
InstallException ie = new InstallException("์ค์น์ค ์์ธ๋ฐ์"); // ์์ธ ์์ฑ
ie.initCause(e); // InstallException์ ์์ธ ์์ธ๋ฅผ SpaceException์ผ๋ก ์ง์
throw ie; // InstallException์ ๋ฐ์์์ผ ์์ ๋ฉ์๋๋ก throws ๋๋ค.
} catch (MemoryException e) {
// ...
}
}
}
- startInstall() ๋ฉ์๋์์ SpaceException ์ด๋ผ๋ ์์ธ๊ฐ ๋ฐ์
- catch ๋ฌธ์์ InstallExceptoin ์์ธ ํด๋์ค๋ฅผ ์๋ก ์์ฑ
- ๊ทธ๋ฆฌ๊ณ InstallException ๊ฐ์ฒด์ ๋ฉ์๋
initCause()๋ฅผ ์ด์ฉํด SpaceException ํ์ ์ ๊ฐ์ฒด๋ฅผ ๋ฃ์ด ์คํ - ๊ทธ๋ฌ๋ฉด SpaceException ์์ธ๋ InstallException ์์ธ์ ํฌํจ๋๊ฒ ๋๋ค. (์์ธ ์์ธ)
- InstallException ์์ธ ๊ฐ์ฒด๋ฅผ ๋ฐ์ผ๋ก throws ํ๋ค.
- ๋ฉ์ธ๋ฉ์๋์์ InstallException ์์ธ๋ฅผ catchํ๊ณ
getCause()๋ฉ์๋๋ฅผ ํตํด ์์ธ ์์ธ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํ๋ค
๋ฐ์ํ ์์ธ๋ฅผ ๊ทธ๋๋ก ์ฒ๋ฆฌํ๋ฉด ๋ ๊ฒ์, ์ ๊ตณ์ด ์์ธ ์์ธ๋ก ํฌ์ฅํด์ ๋ค๋ฅธ ์์ธ๋ก ๋์ง๋ ์ด์ ๋, ์ฌ๋ฌ๊ฐ์ง ์์ธ๋ฅผ ํ๋์ ํฐ ๋ถ๋ฅ์ ์์ธ๋ก ๋ฌถ์ด์ ๋ค๋ฃจ๊ธฐ ์ํด์๋ค. ์์์ ์ธ๊ธํ๋ ๊ฒ ์ฒ๋ผ ๋คํ์ฑ ์์ธ ๋ฒ์ ์ด๋ผ๊ณ ๋ด๋ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ์ ๋ถํฐ ๋ช ํํ ์๋ฌ ์ ๋ณด๋ฅผ ์ฃผ๋ ๊ฒ ๋ณด๋ค๋ ๋จ๊ณ๋ณ๋ก ์ด๋ ํ ์์ธ์ ์๋ฌ์ ์ํด์ ์๋ฌ๊ฐ ๋ฌ๋ค๋ ์ ๋ณด๋ฅผ ์ฃผ๋ ๊ฒ์ด ๋ ์ข๊ธฐ ๋๋ฌธ์ด๋ค. ์๋ฅผ ๋ค์ด ์์ ์ฌ์ง ์ฒ๋ผ, ๋จ์ํ '์ค์นํ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๋ค.' ๋ผ๋ ์๋ฌ๋ง ๋์ฐ๋ฉด ์ด๋ ํ ์์ธ ๋์์ผ๋ก ์ธํด ๊ฐ์๊ธฐ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋์ง ์ถ์ ์ ๋ชปํ๊ธฐ ๋๋ฌธ์, ์์ธ๋ฅผ ๊ฐ์ธ์ '์ค์น์ค์ → ์ค์นํ ๊ณต๊ฐ์ด ๋ถ์กฑํด ์์ธ ๋ฐ์' ์ด๋ฐ์์ผ๋ก ์ถ์ ์ด ์ฉ์ดํ๊ธฐ ๋๋ฌธ์ด๋ค.
Checked ์์ธ๋ฅผ Unchecked ์์ธ๋ก ๋ณํ
์ฐ๊ฒฐ๋ ์์ธ(chained exception)๋ฅผ ์ฌ์ฉํ๋ ๋ ๋ค๋ฅธ ์ด์ ๋ checked์์ธ๋ฅผ unchecked์์ธ๋ก ๋ฐ๊ฟ ์ ์๋๋ก ํ๊ธฐ ์ํจ์ด๋ค.
์๋ฅผ ๋ค์ด checked exception์ ์ข ๋ฅ์ ์์ธ๋ฅผ ํฌํจํ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ(try - catch)๋ฅผ ๊ฐ์ ํ๋ค.
๊ฐ์ฅ ๋ํ์ ์ธ ์๋ก FileWriter ํด๋์ค๋ฅผ ์ด์ฉํด ํ์ผ์ ๋ถ๋ฌ์ค๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ฐ๋์ try - catch๋ก ๊ฐ์ธ์ฃผ์ด์ผ ์ปดํ์ผ์ด ๋๋ค.
์ด๋ฐ์์ผ๋ก ์ค๊ณํ ์ด์ ๋, ์ฒ์ ์๋ฐ ์ธ์ด๋ฅผ ๊ฐ๋ฐ ํ์๋ ํ๋ก๊ทธ๋๋ฐ ๊ฒฝํ์ด ์ ์ ์ฌ๋๋ ๋ณด๋ค ๊ฒฌ๊ณ ํ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์๋๋ก ์ ๋ํ๊ธฐ ์ํด์์ธ๋ฐ, ์ค์ ๋ก ๋ณ๊ฒ ์๋ ์์ธ๋ checked exception ์ผ๋ก ๋ฑ๋กํ ๊ฒ์ด ๊ฝค ๋ง๋ค.
์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์ฒ์ ๊ฐ๋ฐ๋๋ 1990๋ ๋์ ์ง๊ธ์ ์ปดํจํฐ ํ๊ฒฝ์ ๋ง์ด ๋ฌ๋ผ์ก๊ธฐ ๋๋ฌธ์, ์ค์ ๋ก ๋ฐํ์ ์์ธ๋ก ์ฒ๋ฆฌํด๋ ๋ ๊ฒ๋ค์ด ์์ง๋ checked exception์ผ๋ก ๋ฑ๋ก๋์ด ๊ฐ์ ์ ์ผ๋ก try - catch ๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ ๋ถํธํจ์ด ์๊ณ , ๋ํ ๋ก์ง์ Runtime Exception์ผ๋ก ํ ์ ๋ฐ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ ๋๋ฌธ์, ์ถ๊ฐ๋ ๊ธฐ๋ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๋ฐ๋ผ์ ์ฐ๊ฒฐ๋ ์์ธ(chained exception)์ ์ด์ฉํด, checked ์์ธ๋ฅผ unchecked ์์ธ๋ก ๋ฐ๊พธ๋ฉด ์์ธ์ฒ๋ฆฌ๊ฐ ์ ํ์ ์ด ๋๋ฏ๋ก ์ต์ง๋ก ๊ฑฐ์ถ์ฅ ์ค๋ฌ์ด ์์ธ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋๋ค.
class MyCheckedException extends Exception { ... } // checked excpetion
public class Main {
public static void main(String[] args) {
install();
}
public static void install() {
throw new RuntimeException(new IOException("์ค์นํ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๋ค."));
// Checked ์์ธ์ธ IOException์ Unchecked ์์ธ์ธ RuntimeException์ผ๋ก ๊ฐ์ธ Unchecked ์์ธ๋ก ๋ณ์ ์ํจ๋ค
}
}
# ์ฐธ๊ณ ์๋ฃ
https://www.youtube.com/watch?v=I4XrVgCzKM4