๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] ์˜ˆ์™ธ, ์—๋Ÿฌ

์ถœ์ฒ˜

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์—์„œ ์˜ˆ์™ธ์™€ ์—๋Ÿฌ์˜ ๊ตฌ๋ถ„์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๊ณ  ์˜ˆ์™ธ ์ƒํ™ฉ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•˜๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ์˜ˆ์™ธ๋ฅผ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๊ณ , ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜์— ๋Œ€๋น„ํ•  ์ˆ˜ ์žˆ๋‹ค.