๐ ์ด ๊ธ์ "Checked Exception๊ณผ Unchecked Exception"์ ์ฐจ์ด๋ฅผ ์ดํดํ๊ธฐ ์ํด ์๋ฃ๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ ๋ด์ฉ์
๋๋ค.
โ
๊ฐ๋ฐ์๊ฐ ์ค์ํ๊ธฐ ์ฌ์ด ์์ธ ์ฒ๋ฆฌ ๊ฐ๋
์ ๋ช
ํํ๊ฒ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
์์ธ๋ฅผ ์ดํดํ๊ธฐ ์ ์, "์๋ฌ"์ "์์ธ"์ ์ฐจ์ด์ ์ ๋จผ์ ์ง๊ณ ๋์ด๊ฐ์๋ค.
| ๐จ ๊ตฌ๋ถ | ์ค๋ช | ์์ |
|---|---|---|
| ์๋ฌ (Error) | ๊ฐ๋ฐ์๊ฐ ์์ ํ ์ ์๋ ์น๋ช ์ ์ธ ์ค๋ฅ | ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ, ์คํ ์ค๋ฒํ๋ก์ฐ, ์์คํ ์ถฉ๋ |
| ์์ธ (Exception) | ๊ฐ๋ฐ์๊ฐ ์ ์ ํ ์ฒ๋ฆฌ๋ฅผ ํตํด ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ | NullPointerException, FileNotFoundException |
โ ์ฆ, ์์ธ๋ ๊ฐ๋ฐ์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๋ฌธ์ ์ง๋ง, ์๋ฌ๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
โ ์์ธ(Exception)๋ ๋ค์ Checked Exception๊ณผ Unchecked Exception์ผ๋ก ๋๋ฉ๋๋ค.
๐ ์์ธ๋ฅผ ์ปดํ์ผ๋ฌ๊ฐ "์ฒดํฌ"ํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
๐น Checked Exception โ ์ปดํ์ผ ์์ ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์
๐น Unchecked Exception โ ์ปดํ์ผ ์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ (์คํ ์ค ๋ฐ์)
โ Checked Exception์ Exception ํด๋์ค์์ RuntimeException์ ์ ์ธํ ๋ชจ๋ ์์ธ
โ Unchecked Exception์ RuntimeException๊ณผ ๊ทธ ํ์ ์์ธ๋ค
โ Checked Exception์ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์์ฒด๊ฐ ๋์ง ์์ต๋๋ค.
โ ๋ฐ๋ผ์ ๋ฐ๋์ try-catch ๋๋ throw๋ฅผ ์ฌ์ฉํ์ฌ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํฉ๋๋ค.
๐ ๋ํ์ ์ธ Checked Exception
IOException โ ์
์ถ๋ ฅ ์์
์ค ๋ฐ์ํ๋ ์์ธ SQLException โ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ค ๋ฐ์ํ๋ ์์ธ FileNotFoundException โ ์กด์ฌํ์ง ์๋ ํ์ผ์ ์ฐพ์ ๋ ๋ฐ์ ClassNotFoundException โ ์กด์ฌํ์ง ์๋ ํด๋์ค๋ฅผ ์ฐธ์กฐํ ๋ ๋ฐ์ ๐ Checked Exception ์์
import java.io.*;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
FileReader file = new FileReader("test.txt"); // ์กด์ฌํ์ง ์๋ ํ์ผ
} catch (FileNotFoundException e) {
System.out.println("ํ์ผ์ ์ฐพ์ ์ ์์ต๋๋ค: " + e.getMessage());
}
}
}
๐ ์ ์ฝ๋์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์์ฒด๊ฐ ๋์ง ์์ต๋๋ค.
๐ ๋ฐ๋ผ์ Checked Exception์ ๋ฐ๋์ ์ฒ๋ฆฌํด์ผ ํ๋ ์์ธ์
๋๋ค.
โ Checked Exception๊ณผ ๋ฌ๋ฆฌ, ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ต๋๋ค.
โ ์ฆ, ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์๊ณ , ์คํ ์ค(Runtime)์ ๋ฐ์ํ ์ ์๋ ์์ธ
๐ ๋ํ์ ์ธ Unchecked Exception
NullPointerException โ null์ธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ๋ ๋ฐ์ ArrayIndexOutOfBoundsException โ ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ์ด๊ณผํ ๋ ๋ฐ์ ArithmeticException โ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ ๋ฐ์ IllegalArgumentException โ ๋ฉ์๋์ ๋ถ์ ์ ํ ์ธ์๋ฅผ ์ ๋ฌํ ๋ ๋ฐ์ ๐ Unchecked Exception ์์
public class UncheckedExceptionExample {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
System.out.println(arr[3]); // ArrayIndexOutOfBoundsException ๋ฐ์
}
}
๐ ์ ์ฝ๋์์๋ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ง๋ง, ์คํํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
๐ ์ฆ, Unchecked Exception์ "๊ฐ๋ฐ์์ ์ค์"๋ก ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฐ์ ํ์ง ์๋ ๊ฒ์
๋๋ค.
๐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ผ๋ฏ๋ก, ํ์ํ ๊ฒฝ์ฐ try-catch๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
public class UncheckedExceptionHandling {
public static void main(String[] args) {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]); // ์์ธ ๋ฐ์
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์ด๊ณผํ์ต๋๋ค.");
}
}
}
โ Unchecked Exception์ ๋๋ถ๋ถ "๊ฐ๋ฐ์์ ์ค์"๋ก ๋ฐ์ํฉ๋๋ค.
โ ๋ง์ฝ ๋ชจ๋ Unchecked Exception์ ๊ฐ์ ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค๋ฉด ์ฝ๋๊ฐ ๋ถํ์ํ๊ฒ ๋ณต์กํด์ง๋๋ค.
๐ ๋ง์ฝ ๋ฐฐ์ด์ ์ฌ์ฉํ ๋๋ง๋ค ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํด์ผ ํ๋ค๋ฉด?
try {
int[] arr = {1, 2, 3};
System.out.println(arr[3]); // ์์ธ ๋ฐ์ ๊ฐ๋ฅ
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("๋ฐฐ์ด์ ๋ฒ์๋ฅผ ์ด๊ณผํ์ต๋๋ค.");
}
๐ ์ด๋ฐ ๋ฐฉ์์ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ์ด์ง๊ณ ๋นํจ์จ์ ์ด๋ฏ๋ก, ๊ฐ์ ํ์ง ์๋ ๊ฒ์ด ๋ ์ข์ ์ ํ์ ๋๋ค.
โ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ํธ๋์ญ์ (๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ๋ฑ)์ ๋กค๋ฐฑํ ์ง ์ฌ๋ถ
| Exception ์ ํ | ๋กค๋ฐฑ ์ฌ๋ถ | ์ค๋ช |
|---|---|---|
| Checked Exception | ๋กค๋ฐฑํ์ง ์์ | ์์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋๋ฏ๋ก commit ํ ์์ธ๋ฅผ ๋์ง |
| Unchecked Exception | ๋กค๋ฐฑํจ | ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์์ผ๋ฏ๋ก rollback ์ํ |
๐ ์ฆ, Checked Exception์ ์ ์์ ์ธ ํ๋ฆ์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๊ณ , Unchecked Exception์ ์์ธ ๋ฐ์ ์ ์๋์ผ๋ก rollback๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
| ๊ตฌ๋ถ | Checked Exception | Unchecked Exception |
|---|---|---|
| ์์ธ ์ฒ๋ฆฌ ๊ฐ์ ์ฌ๋ถ | โ ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ ํ์ (์ปดํ์ผ๋ฌ ์ฒดํฌ) | โ ์์ธ ์ฒ๋ฆฌ ๊ฐ์ ํ์ง ์์ |
| ๋ฐ์ ์์ | ์ปดํ์ผ ์์ | ์คํ ์์ (Runtime) |
| ๋ํ์ ์ธ ์์ธ | IOException, SQLException, FileNotFoundException | NullPointerException, ArrayIndexOutOfBoundsException, ArithmeticException |
| ๋กค๋ฐฑ ์ฌ๋ถ | โ ๋กค๋ฐฑํ์ง ์์ | โ ๋กค๋ฐฑํจ |
| ์ฃผ์ ํน์ง | ๊ฐ๋ฐ์๊ฐ ์์ํ ์ ์๋ ์์ธ (๋คํธ์ํฌ, ํ์ผ I/O ๋ฑ) | ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ค์๋ก ๋ฐ์ํ๋ ์์ธ |
โ Checked Exception์ ๊ฐ๋ฐ์๊ฐ ๋ฐ๋์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ผ ํ๋ ์์ธ
โ Unchecked Exception์ ๊ฐ๋ฐ์์ ์ค์๋ก ๋ฐ์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฐ์ ํ์ง ์์
โ Unchecked Exception์ ๋ชจ๋ ๊ฐ์ ํ๋ฉด ์ฝ๋๊ฐ ๋๋ฌด ๋ณต์กํด์ง ์ ์์
โ ํธ๋์ญ์
์ฒ๋ฆฌ ์ Checked Exception์ ๋กค๋ฐฑํ์ง ์์ง๋ง, Unchecked Exception์ ๋กค๋ฐฑ๋จ
์ถ์ฒ
Java ์์ธ - 6. checked vs unchecked exception
Checked Exception, Unchecked Exception ๊ทธ๋ฆฌ๊ณ ์์ธ ์ฒ๋ฆฌ
[Java] Checked Exception vs Unchecked Exception ์ ๋ฆฌ