๐Ÿ“š Checked Exception vs Uncheked Exception

CodeByHanยท2025๋…„ 10์›” 5์ผ

์ž๋ฐ”

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

๋ฒŒ์จ ์ถ”์„์ด ๋‹ค๊ฐ€์˜ค๊ณ , ์กธ์—…ํ•œ ์ง€ ๋‘ ๋‹ฌ์ด ๋‹ค ๋˜์–ด๊ฐ„๋‹ค. ๋ฉด์ ‘์„ ์กฐ๊ธˆ์”ฉ ๋‹ค๋…€๋ณด๋ฉด์„œ ์—ฌ๋Ÿฌ ํšŒ์‚ฌ์˜ ์‚ฌ๋ฌด์‹ค์— ๋“ค์–ด๊ฐ€๋ณด๋‹ˆ, ๊ทธ๊ณณ์—์„œ ์‹ค์ œ๋กœ ์ผํ•˜๊ณ  ์‹ถ์€ ์—ด๋ง์ด ์ ์  ๋” ์ปค์ง„๋‹ค. ๋ˆˆ์•ž์— ํŽผ์ณ์ง„ ํ˜„์‹ค์„ ์ง์ ‘ ๋งˆ์ฃผํ• ์ˆ˜๋ก, ๋‚ด๊ฐ€ ๋ฐฐ์šฐ๊ณ  ์„ฑ์žฅํ•ด์•ผ ํ•  ๊ฒƒ๋“ค์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€์ง€๋„ ๋А๋‚€๋‹ค.
ํ•˜์ง€๋งŒ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ  ํ•œ ๊ฑธ์Œ์”ฉ ๋‚˜์•„๊ฐ„๋‹ค๋ฉด, ์–ธ์  ๊ฐ€ ๋‚ด๊ฐ€ ์ƒ์ƒํ•œ ๋‚ด์ผ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ ๋ฏฟ๋Š”๋‹ค.

์ž๋ฐ”์˜ ์˜ˆ์™ธ(Exception)

์ž๋ฐ”์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆˆ๋‹ค.

  1. ์ฒดํฌ ์˜ˆ์™ธ(Checked Exception)
  2. ์—๋Ÿฌ(Error)
  3. ์–ธ์ฒดํฌ ์˜ˆ์™ธ(Unchecked Exception)

์—๋Ÿฌ(Error)

์‹œ์Šคํ…œ์—์„œ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ์ƒํƒœ

์ฃผ๋กœ ํ•˜๋“œ์›จ์–ด๋‚˜ JVM ์ž์ฒด์˜ ๋ฌธ์ œ์™€ ๊ด€๋ จ๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ์ ์œผ๋กœ ๊ณ„์† ์‹คํ–‰๋˜๊ธฐ ์–ด๋ ต๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ(OutOfMemoryError)
  • ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(StackOverflowError)

์—๋Ÿฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ๋Œ€๋ถ€๋ถ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆ๋ฒจ์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์‹œ์Šคํ…œ ์ฐจ์›์—์„œ ์ค‘๋‹จ๋œ๋‹ค.

์˜ˆ์™ธ(Exception)

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ์œผ๋กœ, ๊ฐœ๋ฐœ์ž๊ฐ€ ์ ์ ˆํžˆ ์ฒ˜๋ฆฌํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์† ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.
์˜ˆ์™ธ๋Š” ์ฝ”๋“œ ๋กœ์ง์ด๋‚˜ ์™ธ๋ถ€ ์ž…๋ ฅ, ํ™˜๊ฒฝ์— ์˜ํ•ด ๋ฐœ์ƒํ•˜๋ฉฐ, try-catch ๋ธ”๋ก ๋“ฑ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ ‘๊ทผ(ArrayIndexOutOfBoundsException)
  • null ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ ‘๊ทผ(NullPointerException)
  • ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ(FileNotFoundException)

์˜ˆ์™ธ๋Š” ํฌ๊ฒŒ ์ฒดํฌ ์˜ˆ์™ธ(Checked Exception)์™€ ์–ธ์ฒดํฌ ์˜ˆ์™ธ(Unchecked Exception)๋กœ ๋‚˜๋ˆˆ๋‹ค.

์ฒดํฌ ์˜ˆ์™ธ๋Š” ์ปดํŒŒ์ผ ์‹œ ์ฒ˜๋ฆฌ ์—ฌ๋ถ€๋ฅผ ๊ฐ•์ œํ•˜๋ฉฐ, ์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋Ÿฐํƒ€์ž„ ์‹œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿค” ์ปดํŒŒ์ผ ์‹œ? ๋Ÿฐํƒ€์ž„ ์‹œ?
๐Ÿงฉ ์ปดํŒŒ์ผ(Compile)

  • ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „, ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์„ ๋นŒ๋“œ(์ปดํŒŒ์ผ) ํ•˜๋Š” ์ˆœ๊ฐ„
  • ์ด๋•Œ๋Š” ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋‚˜ ํƒ€์ž… ์˜ค๋ฅ˜ ๊ฐ™์€ ๊ฑธ ๋ฏธ๋ฆฌ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜, ์ž๋ฃŒํ˜•์ด ๋งž์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์‹œ์ ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ
    ๐Ÿ‘‰ ์ฆ‰, โ€œ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œโ€
    โš™๏ธ ๋Ÿฐํƒ€์ž„ ์‹œ (Runtime)
  • ํ”„๋กœ๊ทธ๋žจ์ด ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๋™์•ˆ์„ ์˜๋ฏธ
  • ์‹คํ–‰ ์ค‘์— ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ, ๋„คํŠธ์›Œํฌ, ํŒŒ์ผ ๋“ฑ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
  • ์˜ˆ๋ฅผ ๋“ค์–ด, 0์œผ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜(null ์ฐธ์กฐ, ํŒŒ์ผ ์—†์Œ ๋“ฑ) ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Ÿฐํƒ€์ž„ ์‹œ์ ์˜ ๋ฌธ์ œ
    ๐Ÿ‘‰ ์ฆ‰, โ€œ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œโ€

์ฒดํฌ ์˜ˆ์™ธ(Checked Exception)

RuntimeException ์˜ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ฉด์„œ Exception ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค

์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋ฐ˜๋“œ์‹œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ(try-catch, throw) ํ•ด์•ผํ•œ๋‹ค.

  • FileNotFoundException
  • ClassNotFoundException

์–ธ์ฒดํฌ ์˜ˆ์™ธ(UnChecked Exception)

RuntimeException์˜ ํ•˜์œ„ ํด๋ž˜์Šค
์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.
๋Ÿฐํƒ€์ž„์‹œ์— ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ

  • ArrayIndexOutOfBoundsException
  • NullPointerException

๐Ÿค” ์–ธ์ฒดํฌ ์˜ˆ์™ธ(UnChecked Exception)๋Š” ์™œ ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ์•ˆํ•ด๋„ ๋˜๋‚˜์š”?

1๏ธโƒฃ ํ”„๋กœ๊ทธ๋žจ์˜ ๋…ผ๋ฆฌ์  ์‹ค์ˆ˜๋กœ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ

์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋Œ€๋ถ€๋ถ„ ๊ฐœ๋ฐœ์ž์˜ ๋กœ์ง ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ๋‹ค.

String s = null;
System.out.println(s.length()); //NullPointerException ๋ฐœ์ƒ

์ด ๋ฌธ์ œ๋Š” ์™ธ๋ถ€ ์š”์ธ์ด ์•„๋‹Œ ์ฝ”๋“œ ์ž‘์„ฑ ์‹œ์ ์— ์ถฉ๋ถ„ํžˆ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ,
์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ try-catch๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ๊ฐ•์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.

2๏ธโƒฃ ๋ชจ๋“  ์ฝ”๋“œ์— try-catch๋ฅผ ๊ฐ•์ œํ•˜๋ฉด ์˜คํžˆ๋ ค ๋ณต์žกํ•ด์ง

๋งŒ์•ฝ ์–ธ์ฒดํฌ ์˜ˆ์™ธ๊นŒ์ง€ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค๋ฉด,
์ฝ”๋“œ๊ฐ€ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๊ธธ์–ด์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.

try {
    String s = null;
    System.out.println(s.length());
} catch (NullPointerException e) {
    e.printStackTrace();
}

์ด๋Ÿฐ ์‹์œผ๋กœ ๋งค๋ฒˆ ๊ฐ์‹ธ๋Š” ๊ฑด ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์—,
์ž๋ฐ”๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šค์Šค๋กœ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ์— ๋Œ€ํ•ด์„œ๋Š” ์ž์œจ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•œ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ(Rollback) ์‹œ ์ฒดํฌ ์˜ˆ์™ธ vs ์–ธ์ฒดํฌ ์˜ˆ์™ธ

๊ตฌ๋ถ„์˜ˆ์‹œ๊ธฐ๋ณธ ๋กค๋ฐฑ ์—ฌ๋ถ€์„ค๋ช…์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•
์ฒดํฌ ์˜ˆ์™ธ (Checked Exception)IOException, SQLExceptionโŒ ๋กค๋ฐฑ๋˜์ง€ ์•Š์Œ์ปดํŒŒ์ผ ์‹œ์ ์— ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ•์ œ๋จ. ์ฃผ๋กœ ์™ธ๋ถ€ ์š”์ธ(ํŒŒ์ผ, ๋„คํŠธ์›Œํฌ ๋“ฑ)์œผ๋กœ ๋ฐœ์ƒํ•˜๋ฉฐ ๋ณต๊ตฌ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ.๋ช…์‹œ์ ์œผ๋กœ rollbackFor ์†์„ฑ ์ง€์ • ํ•„์š” โ†’ @Transactional(rollbackFor = Exception.class)
์–ธ์ฒดํฌ ์˜ˆ์™ธ (Unchecked Exception)NullPointerException, IllegalArgumentExceptionโœ… ์ž๋™ ๋กค๋ฐฑ๋จ๋Ÿฐํƒ€์ž„ ์‹œ์ ์— ๋ฐœ์ƒํ•˜๋ฉฐ, ์ฃผ๋กœ ๊ฐœ๋ฐœ์ž์˜ ๋…ผ๋ฆฌ์  ์‹ค์ˆ˜๋กœ ๋ฐœ์ƒ. ๋ณต๊ตฌ๊ฐ€ ์–ด๋ ต๊ณ  ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜๋กœ ๊ฐ„์ฃผ๋จ.@Transactional ๊ธฐ๋ณธ ์„ค์ •์œผ๋กœ ์ž๋™ ๋กค๋ฐฑ ์ฒ˜๋ฆฌ
  • ์Šคํ”„๋ง์˜ ๊ธฐ๋ณธ ์ •์ฑ…
    • @Transactional์€ ๊ธฐ๋ณธ์ ์œผ๋กœ RuntimeException(์–ธ์ฒดํฌ ์˜ˆ์™ธ)์ด๋‚˜ Error๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋กค๋ฐฑ
    • ๋ฐ˜๋ฉด, Checked Exception์€ ์ž๋™์œผ๋กœ ๋กค๋ฐฑ๋˜์ง€ ์•Š๋Š”๋‹ค
  • ์ด์œ 
    • ์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์ƒํ™ฉ์ผ ์ˆ˜ ์žˆ์–ด, ์Šคํ”„๋ง์ด ์ž๋™์œผ๋กœ ๋กค๋ฐฑํ•˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„
    • ๋ฐ˜๋ฉด ์–ธ์ฒดํฌ ์˜ˆ์™ธ๋Š” ๋ณต๊ตฌ๊ฐ€ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์— ์ž๋™ ๋กค๋ฐฑํ•˜๋Š” ๊ฒƒ์ด ์•ˆ์ „

@Transactional
public void process() throws IOException {
    // Checked Exception ๋ฐœ์ƒ โ†’ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กค๋ฐฑ๋˜์ง€ ์•Š์Œ
    throw new IOException("ํŒŒ์ผ ์ฝ๊ธฐ ์‹คํŒจ");
}

@Transactional
public void execute() {
    // Unchecked Exception ๋ฐœ์ƒ โ†’ ์ž๋™ ๋กค๋ฐฑ๋จ
    throw new NullPointerException("๋„ ์ฐธ์กฐ ์˜ค๋ฅ˜");
}

@Transactional(rollbackFor = Exception.class)
public void forceRollback() throws IOException {
    // Checked Exception์ด์ง€๋งŒ ๋ช…์‹œ์ ์œผ๋กœ ๋กค๋ฐฑ ์„ค์ •
    throw new IOException("๊ฐ•์ œ ๋กค๋ฐฑ");
}

์ฐธ๊ณ 

profile
๋…ธ๋ ฅ์€ ๋ฐฐ์‹ ํ•˜์ง€ ์•Š์•„ ๐Ÿ”ฅ

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

comment-user-thumbnail
2025๋…„ 10์›” 5์ผ

์ž๊ธฐ์•ผ ํž˜๋ƒ‰โ™ก ํŒŒ์ดํŒ… ์•„์ž์•„์ž!!!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ