์ถ์ฒ
ChatGPT
์๋ฐ(Java)์์๋ ํ๋ก๊ทธ๋จ ์คํ ์ค ๋ฐ์ํ๋ ๋น์ ์์ ์ธ ์ํฉ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์์ธ(Exception)์ ์๋ฌ(Error)๋ฅผ ์ฌ์ฉํ๋ค. ์ด ๋์ ๋ชจ๋ `Throwable` ํด๋์ค๋ฅผ ์์๋ฐ์ ์์ ํด๋์ค์ด์ง๋ง, ๊ทธ ๋ชฉ์ ๊ณผ ์ฌ์ฉ ๋ฐฉ์์์ ์ค์ํ ์ฐจ์ด์ ์ด ์๋ค.
1. ์์ธ(Exception)์ ์๋ฌ(Error)์ ๊ธฐ๋ณธ ๊ฐ๋
์์ธ Exception
ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐ์ํ ์ ์๋ ์๊ธฐ์น ์์ ์ํฉ์ ์๋ฏธํ๋ค. ์ด๋ฌํ ์ํฉ์ ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ ๋
ผ๋ฆฌ์ ์ธ ์ค๋ฅ๋ ์๋ชป๋ ์ฌ์ฉ์ ์
๋ ฅ, ๋คํธ์ํฌ ๋ฌธ์ ๋ฑ ๋น๊ต์ ์์ธก ๊ฐ๋ฅํ ๋ฌธ์ ๋ค์ด๋ค. ์์ธ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ ๋ด์์ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, `Exception` ํด๋์ค์ ์ธ์คํด์ค๋ก ํํ๋ฉ๋๋ค.
์๋ฌ Error
์๋ฐ ํ๋ก๊ทธ๋จ์ด ์ ์์ ์ผ๋ก ์คํ๋ ์ ์๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๋ํ๋ธ๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ ์ฃผ๋ก JVM์ ์์ ๋ถ์กฑ, ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ(OutOfMemoryError), ์คํ ์ค๋ฒํ๋ก(StackOverflowError) ๋ฑ ์์คํ
๋ ๋ฒจ์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค์ด๋ค. ์๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์์ ๋ณต๊ตฌํ ์ ์๋ ์ํฉ์ ์๋ฏธํ๋ฉฐ, `Error` ํด๋์ค์ ์ธ์คํด์ค๋ก ํํ๋๋ค.
2. ์์ธ(Exception)์ ์๋ฌ(Error)์ ์ฐจ์ด์
ํน์ฑ | ์์ธ Exception | ์๋ฌ Error |
๊ธฐ๋ณธ ๊ฐ๋ | ํ๋ก๊ทธ๋จ ๋ด์์ ์์ธก ๊ฐ๋ฅํ ๋ฌธ์ ์ํฉ | JVM์์ ๋ฐ์ํ๋ ์ฌ๊ฐํ ์์คํ ๋ ๋ฒจ ๋ฌธ์ |
์์ ๊ณ์ธต | java.lang.Exception | java.lang.Error |
๋ณต๊ตฌ ๊ฐ๋ฅ์ฑ | ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ์ฝ๋์์ ๋ณต๊ตฌ ๊ฐ๋ฅ | ๋ณต๊ตฌ ๋ถ๊ฐ๋ฅ, ํ๋ก๊ทธ๋จ ์ข ๋ฃ๊ฐ ์ผ๋ฐ์ |
์์ | `IOException`, `SQLException`, `NullPointerException` | `OutOfMemoryError`, `StackOverflowError`, `VirtualMachineError` |
์ฉ๋ | ๊ฐ๋ฐ์๊ฐ ์ฒ๋ฆฌํ๊ณ ๋ณต๊ตฌํ ์ ์๋ ์ค๋ฅ ์ฒ๋ฆฌ | ์์คํ ๋ ๋ฒจ์ ์ค๋ฅ๋ก, ๋ณต๊ตฌ๋ฅผ ์๋ํ์ง ์์ |
์ฒ๋ฆฌ ๋ฐฉ๋ฒ | `try-catch` ๋ธ๋ก์ผ๋ก ์์ธ๋ฅผ ์ก๊ณ ์ฒ๋ฆฌ | ์ผ๋ฐ์ ์ผ๋ก ์ฒ๋ฆฌํ์ง ์์; ์๋ฌ ๋ฐ์ ์ ํ๋ก๊ทธ๋จ ์ข ๋ฃ๊ฐ ๋ฐ์ํ ์ ์์ |
3. ์์ธ์ ์ข ๋ฅ
์๋ฐ์์ ์์ธ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๋๋๋ค.
1) ๊ฒ์ฌ๋ ์์ธ Checked Exception
์ปดํ์ผ ์์ ์ ์ปดํ์ผ๋ฌ๊ฐ ๋ฐ๋์ ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ์๊ตฌํ๋ ์์ธ์ด๋ค. ์ด๋ฌํ ์์ธ๋ ๊ฐ๋ฐ์๊ฐ ์์ธก ๊ฐ๋ฅํ๋ฉฐ, ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ์ฌ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ผ ์ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ถ ํ๊ฒฝ๊ณผ ์ํธ์์ฉํ ๋ ๋ฐ์ํ๋ค.
์์
- `IOException`: ํ์ผ ์ ์ถ๋ ฅ ์์ ์ค ๋ฐ์ํ ์ ์๋ ์์ธ
- `SQLException`: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ค ๋ฐ์ํ ์ ์๋ ์์ธ
ํน์ง
- `try-catch` ๋ธ๋ก์ด๋ `throws` ํค์๋๋ฅผ ํตํด ์์ธ๋ฅผ ๋ช ์์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class CheckedExceptionExample {
public static void main(String[] args) {
try {
File file = new File("nonexistentfile.txt");
FileReader fr = new FileReader(file); // FileNotFoundException ๋ฐ์ ๊ฐ๋ฅ
} catch (IOException e) {
System.out.println("ํ์ผ์ ์ฝ๋ ๋์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: " + e.getMessage());
}
}
}
2) ๊ฒ์ฌ๋์ง ์์ ์์ธ Unchecked Exception
๋ฐํ์ ์์ ์ ๋ฐ์ํ๋ ์์ธ๋ก, ์ปดํ์ผ๋ฌ๊ฐ ๊ฒ์ฌํ์ง ์๋๋ค. ์ฃผ๋ก ํ๋ก๊ทธ๋๋ฐ ์ค๋ฅ(์: ์๋ชป๋ ๋ก์ง, ์๋ชป๋ API ์ฌ์ฉ)๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ฌ์ ์ ๋ฐฉ์งํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์์
- `NullPointerException`: ๊ฐ์ฒด๊ฐ null์ธ ์ํ์์ ๋ฉ์๋๋ ํ๋๋ฅผ ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๋ฐ์
- `ArrayIndexOutOfBoundsException`: ๋ฐฐ์ด์ ์ ํจํ์ง ์์ ์ธ๋ฑ์ค์ ์ ๊ทผํ๋ ค๊ณ ํ ๋ ๋ฐ์
- `ArithmeticException`: 0์ผ๋ก ๋๋๊ธฐ๋ฅผ ์๋ํ ๋ ๋ฐ์
ํน์ง
- ์ปดํ์ผ๋ฌ๊ฐ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํ์ง ์๊ธฐ ๋๋ฌธ์, `try-catch` ๋ธ๋ก ์์ด๋ ์ปดํ์ผ์ด ๊ฐ๋ฅํ๋ค.
- ์์ธ๋ฅผ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ด ๋น์ ์ ์ข ๋ฃ๋ ์ ์๋ค.
public class UncheckedExceptionExample {
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
System.out.println(numbers[3]); // ArrayIndexOutOfBoundsException ๋ฐ์
}
}
4. ์๋ฌ(Error)์ ์ข
๋ฅ
์๋ฌ๋ ํ๋ก๊ทธ๋จ ์ฝ๋์์ ์ง์ ์ฒ๋ฆฌํ ํ์๊ฐ ์๋, ๋๋ ์ฒ๋ฆฌํ ์ ์๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๋ํ๋ธ๋ค. ์ฃผ๋ก JVM์ด ๋น์ ์์ ์ธ ์ํฉ์ ์ง๋ฉดํ์ ๋ ๋ฐ์ํ๋ค.
์ฃผ์ ์๋ฌ ์์
- `OutOfMemoryError`: ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ ๋ฐ์ํ๋ค. ์๋ฅผ ๋ค์ด, ๋๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ์ ๋ ๋ฐ์ํ ์ ์๋ค.
- `StackOverflowError`: ์ฌ๊ท ํธ์ถ์ด ๋๋ฌด ๊น์ด์ ธ์ ์คํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๊ณผ๋ ๋ ๋ฐ์ํ๋ค.
- `VirtualMachineError`: JVM์ด ์์๋๊ฑฐ๋ ์ด์ ์ฒด์ ์์์ ์ฌ์ฉํ ์ ์์ ๋ ๋ฐ์ํ๋ค. ์๋ฅผ ๋ค์ด, `InternalError`, `UnknownError` ๋ฑ์ด ์๋ค.
์๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋จ ๋ด์์ ๋ณต๊ตฌํ ์ ์์ผ๋ฏ๋ก, ๋ฐ์ํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ข ๋ฃ๋๋ค.
public class ErrorExample {
public static void main(String[] args) {
// ๋ฌดํ ์ฌ๊ท ํธ์ถ๋ก ์ธํด StackOverflowError ๋ฐ์
causeStackOverflow();
}
public static void causeStackOverflow() {
causeStackOverflow(); // ๋ฌดํ ์ฌ๊ท ํธ์ถ
}
}
5. ๊ฒฐ๋ก
- ์์ธ(Exception): ํ๋ก๊ทธ๋จ์์ ์์ธก ๊ฐ๋ฅํ ์ค๋ฅ ์ํฉ์ ๋ํ๋ด๋ฉฐ, ๋ณต๊ตฌํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค. `Checked Exception`๊ณผ `Unchecked Exception`์ผ๋ก ๋๋๋ฉฐ, ๊ฐ๋ฐ์๋ ์ด๋ฅผ ์ ์ ํ ์ฒ๋ฆฌํด์ผ ํ๋ค.
- ์๋ฌ(Error): JVM ๋ ๋ฒจ์์ ๋ฐ์ํ๋ ์ฌ๊ฐํ ๋ฌธ์ ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๋ณต๊ตฌํ ์ ์๋ค. ํ๋ก๊ทธ๋จ ์ฝ๋์์ ์ฒ๋ฆฌํ๊ธฐ๋ณด๋ค๋ ์์คํ
์ ์์ ์ฑ์ด๋ ์์ ๋ฌธ์ ๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ํ๋ก๊ทธ๋จ ์ข
๋ฃ๋ฅผ ์ผ๊ธฐํ๋ค.
Java์์ ์์ธ์ ์๋ฌ์ ๊ตฌ๋ถ์ ํ๋ก๊ทธ๋จ์ ์์ ์ฑ์ ๋์ด๊ณ ์์ธ ์ํฉ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ๋ฐ ์ค์ํ๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์์ธ๋ฅผ ์ ์ ํ ์ฒ๋ฆฌํ๊ณ , ์์์น ๋ชปํ ์ค๋ฅ์ ๋๋นํ ์ ์๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] Tail Recursion Optimization ๋์ฒด ๋ฐฉ๋ฒ (0) | 2024.08.28 |
---|---|
[Java][JVM] StackOverflowError์ ์์ธ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ (0) | 2024.08.27 |
[Java] ์ ๋ค๋ฆญ (1) | 2024.08.27 |
[Java] ๋ณ์ฑ Variance (0) | 2024.08.27 |
[Java] ์ ์ ๋ค๋ฆญ์ ์์ ํ์ ์ ์ฌ์ฉํ ์ ์๋๊ฐ (0) | 2024.08.27 |