Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception Handling) - (2)
๐Ÿ“‚ JAVA/์ฃผ์š” ๊ฐœ๋…

์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception Handling) - (2)

2023. 1. 28. 16:06

1. try-with-resources๋ฌธ โ›ณ

try (SomeResource resource = getResource()) {
  use(resource);
} catch(Exception e) {
  ...
}

  JDK1.7๋ถ€ํ„ฐ try-with-resources๋ฌธ์ด ์ถ”๊ฐ€๋˜์—ˆ๋‹ค. try-with-resources๋ฌธ์˜ ๊ด„ํ˜ธ() ์•ˆ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฌธ์žฅ์„ ๋„ฃ์œผ๋ฉด, ์ด ๊ฐ์ฒด๋Š” ๋”ฐ๋กœ close()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์•„๋„ try๋ธ”๋Ÿญ์„ ๋ฒ—์–ด๋‚˜๋Š” ์ˆœ๊ฐ„ ์ž๋™์ ์œผ๋กœ close()๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  catch๋ธ”๋Ÿญ ๋˜๋Š” finally๋ธ”๋Ÿญ์ด ๋”ฐ๋ผ์˜ค๊ฒŒ ๋œ๋‹ค.

  ์ด๋•Œ try-with-resources๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๊ฐ์ฒด์˜ close()๊ฐ€ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ํด๋ž˜์Šค๊ฐ€ AutoCloseable์ด๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด์–ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณต์ˆ˜์˜ ์ž์› ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

try (Something1 s1 = new Something1();
	Something2 s2 = new Something2()) {
  use(resource);
} catch(Exception e) {
  ...
}

  try-with-resources์˜ ์žฅ์ ์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งํฌ๋œ ๊ธ€์„ ์ฐธ์กฐํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

 

2. ์‚ฌ์šฉ์ž์ •์˜ ์˜ˆ์™ธ ๐ŸŽณ

  ๊ธฐ์กด์˜ ์ •์˜๋œ ์˜ˆ์™ธ ํด๋ž˜์Šค ์™ธ์— ํ•„์š”์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ƒˆ๋กœ์šด ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (๊ฐ€๋Šฅํ•˜๋ฉด ์ƒˆ๋กœ์šด ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ๋ณด๋‹ค ๊ธฐ์กด์˜ ์˜ˆ์™ธํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.)

// ์‚ฌ์šฉ์ž์ •์˜ ์˜ˆ์™ธ ์ž‘์„ฑ ์˜ˆ์‹œ
class MyException extends Exception {
  MyException(String msg) {
  	super(msg + "์€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
  }
}

 

3. ์—ฐ๊ฒฐ๋œ ์˜ˆ์™ธ(Chained Exception) ๐ŸฅŒ

  ํ•œ ์˜ˆ์™ธ๊ฐ€ ๋‹ค๋ฅธ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. A๊ฐ€ ์˜ˆ์™ธ B๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋ฉด A๋ฅผ B์˜ '์›์ธ ์˜ˆ์™ธ(cause exception)'๋ผ๊ณ  ํ•œ๋‹ค. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ B๋ฅผ ์ƒ์„ฑํ•œ ํ›„, initCause()๋กœ A๋ฅผ B์˜ ์›์ธ ์˜ˆ์™ธ๋กœ ๋“ฑ๋กํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  'throw'๋กœ ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค.

try {
} catch (AException e) {
  B b = new B("์˜ˆ์™ธ ๋ฐœ์ƒ");
  b.initCause(e);
  throw b;
}

  ์ง€๊ธˆ๊นŒ์ง€ ํ•ด์™”๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ๊ทธ๋ƒฅ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋  ํ…๋ฐ ์™œ ์ด๋ ‡๊ฒŒ ํ• ๊นŒ? ๊ทธ ์ด์œ ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ˆ์™ธ๋ฅผ ํ•˜๋‚˜์˜ ํฐ ๋ถ„๋ฅ˜์˜ ์˜ˆ์™ธ๋กœ ๋ฌถ์–ด์„œ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๋ฌผ๋ก  ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜ˆ์™ธ์˜ ๊ณตํ†ต ์กฐ์ƒํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ์ด๋Š” ์‹ค์ œ๋กœ ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ์™€ ์ƒ์†๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

try {
  throw new ChildException1();
  throw new ChildException2();
} catch (ParentException e) {
  ... // ์–ด๋–ค ์ž์†์˜ ์˜ˆ์™ธ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.
}

  ์ด๋•Œ ์˜ˆ์™ธ๊ฐ€ ์›์ธ ์˜ˆ์™ธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค๋ฉด ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค. 

public static void main(String args[]) {
  try {
    method();
  } catch (ParentException e) {
    e.printStackTrace();
  }
}

static void method() throws ChildException1, ChildException2 {
  try {
  	checkSeat();
  } catch(ChildException1 e) {
    ParentException pe = new ParentException("ParentException ๋ฐœ์ƒ");
    ie.initCause(e);
    throw e;
  } catch(ChildException2 e) {
    ParentException pe = new ParentException("ParentException ๋ฐœ์ƒ");
    ie.initCause(e);
    throw e;
  }
  
}

static void checkSeat() throws ChildException1, ChildException2 {
  if(!isChild1Seat(){
  	throw new ChildException1("Child1์˜ ์ž๋ฆฌ๊ฐ€ ์•„๋‹˜");
  }
  
  if(!isChild2Seat(){
  	throw new ChildException2("Child2์˜ ์ž๋ฆฌ๊ฐ€ ์•„๋‹˜");
  }
}

// 'ParentException ๋ฐœ์ƒ'์œผ๋กœ ํฐ ๋ถ„๋ฅ˜์˜ ์˜ˆ์™ธ๋ฅผ ๋ฌถ์„ ์ˆ˜ ์žˆ๊ณ 
// 'Child1์˜ ์ž๋ฆฌ๊ฐ€ ์•„๋‹˜'๊ณผ 'Child2์˜ ์ž๋ฆฌ๊ฐ€ ์•„๋‹˜'์„ ํ†ตํ•ด ์‹ค์ œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
// ChildException1๊ณผ ChildException2์˜ ์ƒ์†๊ด€๊ณ„๋„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

  ์—ฐ๊ฒฐ๋œ ์˜ˆ์™ธ(Chained Exception)์˜ ๋˜ ๋‹ค๋ฅธ ์žฅ์ ์œผ๋กœ๋Š” checked์˜ˆ์™ธ๋ฅผ unchecked์˜ˆ์™ธ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

static void method() throws MemoryException {
  if(!enoughMemory())
    throw new MemoryException("๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ");
}

  ์œ„์˜ ์ฝ”๋“œ์—์„œ method()๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด checkedException์ธ MemoryException์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ try-catch๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

static void method() {
  if(!enoughMemory())
    throw new RuntimeException(new MemoryException("๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ"));
}

  ํ•˜์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด MemoryException์„ RuntimeException์œผ๋กœ ๊ฐ์‹ธ์ฃผ๋ฉด unchecked์˜ˆ์™ธ๊ฐ€ ๋˜๊ณ , ๊ทธ๋ž˜์„œ throws MemoryException์„ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค. (RuntimeException์˜ ์ƒ์„ฑ์ž๋ฅผ initCause() ๋Œ€์‹  ์‚ฌ์šฉํ•˜์˜€๋‹ค.)

 

ํ•ด๋‹น ๊ธ€์€ ๋‚จ๊ถ ์„ฑ๋‹˜์˜ Java์˜ ์ •์„์„ ์ฝ๊ณ  ์ž‘์„ฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

'๐Ÿ“‚ JAVA > ์ฃผ์š” ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์ž…์ถœ๋ ฅ(I/O)(1) - ๋…ธ๋“œ ์ŠคํŠธ๋ฆผ, ๋ณด์กฐ ์ŠคํŠธ๋ฆผ  (0) 2023.01.29
๋žŒ๋‹ค์‹(Lambda Expression) - (2)  (0) 2023.01.29
๋žŒ๋‹ค์‹(Lambda Expression) - (1)  (0) 2023.01.29
Comparable๊ณผ Comparator  (0) 2023.01.28
์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception Handling) - (1)  (0) 2023.01.28
    '๐Ÿ“‚ JAVA/์ฃผ์š” ๊ฐœ๋…' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ๋žŒ๋‹ค์‹(Lambda Expression) - (2)
    • ๋žŒ๋‹ค์‹(Lambda Expression) - (1)
    • Comparable๊ณผ Comparator
    • ์˜ˆ์™ธ์ฒ˜๋ฆฌ(Exception Handling) - (1)
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”