checked vs unchecked exception

๋„๋‘๋งจยท2025๋…„ 3์›” 24์ผ

๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
7/23

๐Ÿ“Œ Checked Exception vs Unchecked Exception

๐Ÿ” ์ด ๊ธ€์€ "Checked Exception๊ณผ Unchecked Exception"์˜ ์ฐจ์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฃŒ๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
โœ… ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ˆ˜ํ•˜๊ธฐ ์‰ฌ์šด ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐœ๋…์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๐Ÿ›‘ ์—๋Ÿฌ vs ์˜ˆ์™ธ

์˜ˆ์™ธ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์ „์—, "์—๋Ÿฌ"์™€ "์˜ˆ์™ธ"์˜ ์ฐจ์ด์ ์„ ๋จผ์ € ์งš๊ณ  ๋„˜์–ด๊ฐ‘์‹œ๋‹ค.

๐Ÿšจ ๊ตฌ๋ถ„์„ค๋ช…์˜ˆ์‹œ
์—๋Ÿฌ (Error)๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ, ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ, ์‹œ์Šคํ…œ ์ถฉ๋Œ
์˜ˆ์™ธ (Exception)๊ฐœ๋ฐœ์ž๊ฐ€ ์ ์ ˆํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œNullPointerException, FileNotFoundException

โœ” ์ฆ‰, ์˜ˆ์™ธ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ง€๋งŒ, ์—๋Ÿฌ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
โœ” ์˜ˆ์™ธ(Exception)๋Š” ๋‹ค์‹œ Checked Exception๊ณผ Unchecked Exception์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.


๐Ÿ” Checked Exception vs Unchecked Exception

๐Ÿ“Œ ์˜ˆ์™ธ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ "์ฒดํฌ"ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

๐Ÿ”น Checked Exception โ†’ ์ปดํŒŒ์ผ ์‹œ์ ์— ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œ
๐Ÿ”น Unchecked Exception โ†’ ์ปดํŒŒ์ผ ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์Œ (์‹คํ–‰ ์ค‘ ๋ฐœ์ƒ)

โœ” Checked Exception์€ Exception ํด๋ž˜์Šค์—์„œ RuntimeException์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์˜ˆ์™ธ
โœ” Unchecked Exception์€ RuntimeException๊ณผ ๊ทธ ํ•˜์œ„ ์˜ˆ์™ธ๋“ค


๐Ÿ›  Checked Exception (์ปดํŒŒ์ผ ์‹œ์  ์˜ˆ์™ธ)

โœ” 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์€ ๋ฐ˜๋“œ์‹œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค.


โšก Unchecked 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์€ ๋Œ€๋ถ€๋ถ„ "๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜"๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
โœ” ๋งŒ์•ฝ ๋ชจ๋“  Unchecked Exception์„ ๊ฐ•์ œ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์ฝ”๋“œ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

๐Ÿ“Œ ๋งŒ์•ฝ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•ด์•ผ ํ•œ๋‹ค๋ฉด?

try {
    int[] arr = {1, 2, 3};
    System.out.println(arr[3]); // ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.");
}

๐Ÿ“Œ ์ด๋Ÿฐ ๋ฐฉ์‹์€ ์ฝ”๋“œ๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด์ง€๊ณ  ๋น„ํšจ์œจ์ ์ด๋ฏ€๋กœ, ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค.


๐Ÿ”„ Checked vs Unchecked Exception์˜ rollback ์ฐจ์ด

โœ” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํŠธ๋žœ์žญ์…˜(๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ๋“ฑ)์„ ๋กค๋ฐฑํ• ์ง€ ์—ฌ๋ถ€

Exception ์œ ํ˜•๋กค๋ฐฑ ์—ฌ๋ถ€์„ค๋ช…
Checked Exception๋กค๋ฐฑํ•˜์ง€ ์•Š์Œ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ•์ œ๋˜๋ฏ€๋กœ commit ํ›„ ์˜ˆ์™ธ๋ฅผ ๋˜์ง
Unchecked Exception๋กค๋ฐฑํ•จ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ rollback ์ˆ˜ํ–‰

๐Ÿ“Œ ์ฆ‰, Checked Exception์€ ์ •์ƒ์ ์ธ ํ๋ฆ„์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์•ผ ํ•˜๊ณ , Unchecked Exception์€ ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ ์ž๋™์œผ๋กœ rollback๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.


๐Ÿš€ ์ •๋ฆฌ: Checked vs Unchecked Exception

๊ตฌ๋ถ„Checked ExceptionUnchecked Exception
์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ•์ œ ์—ฌ๋ถ€โœ” ๋ฐ˜๋“œ์‹œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ํ•„์š” (์ปดํŒŒ์ผ๋Ÿฌ ์ฒดํฌ)โŒ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ•์ œํ•˜์ง€ ์•Š์Œ
๋ฐœ์ƒ ์‹œ์ ์ปดํŒŒ์ผ ์‹œ์ ์‹คํ–‰ ์‹œ์  (Runtime)
๋Œ€ํ‘œ์ ์ธ ์˜ˆ์™ธIOException, SQLException, FileNotFoundExceptionNullPointerException, 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 ์ •๋ฆฌ

0๊ฐœ์˜ ๋Œ“๊ธ€