๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” - ์˜ˆ์™ธ

15945 ๋‹จ์–ด ๋…์„œJava20222022

10์žฅ - ์˜ˆ์™ธ


๐Ÿ’ก ์˜ˆ์™ธ๋Š” ์ง„์งœ ์˜ˆ์™ธ ์ƒํ™ฉ์—๋งŒ ์‚ฌ์šฉํ•˜๋ผ

โ€œ์˜ˆ์™ธ๋ฅผ ์ •์ƒ์ ์ธ ์ œ์–ด ํ๋ฆ„์—์„œ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.โ€

1. ์˜ˆ์™ธ๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ์˜ˆ

// ์˜ˆ์™ธ๋ฅผ ์™„์ „ํžˆ ์ž˜๋ชป ์‚ฌ์šฉํ•œ ์˜ˆ
try {
		int i = 0;
		while(true)
				range[i++].climb();
} catch(ArrayIndexOutOfBoundsException e) {
}
  • ์œ„์˜ ์˜ˆ์‹œ๋Š” ์•„์ฃผ ๋”์ฐํ•œ ์ฝ”๋“œ์ž„. ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ๋Œ๋‹ค๊ฐ€ ๋ฐฐ์—ด์˜ ๋์— ๋„๋‹ฌํ•ด ArrayIndexOutOfBoundsException์ด ๋ฐœ์ƒํ•˜๋ฉด ๋์„ ๋‚ด๋Š” ๊ฒƒ.
  • ์ด ์ฝ”๋“œ๋Š” ์ž˜๋ชป๋œ ์ถ”๋ก ์„ ๊ทผ๊ฑฐ๋กœ ์„ฑ๋Šฅ์„ ๋†’์—ฌ๋ณด๋ ค ํ•œ ์‚ฌ๋ก€์ž„.
    • JVM์€ ๋ฐฐ์—ด์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ๊ฒฝ๊ณ„๋ฅผ ๋„˜์ง€ ์•Š๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š”๋ฐ, ์ผ๋ฐ˜์ ์ธ ๋ฐ˜๋ณต๋ฌธ๋„ ๋ฐฐ์—ด ๊ฒฝ๊ณ„์— ๋„๋‹ฌํ•˜๋ฉด ์ข…๋ฃŒํ•œ๋‹ค. โ†’ ๋”ฐ๋ผ์„œ ์ด ๊ฒ€์‚ฌ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์—๋„ ๋ช…์‹œํ•˜๋ฉด ๊ฐ™์€ ์ผ์ด ์ค‘๋ณต๋˜๋ฏ€๋กœ ํ•˜๋‚˜๋ฅผ ์ƒ๋žตํ•œ ๊ฒƒ
    • ์ด ์ถ”๋ก ์€ ์„ธ ๊ฐ€์ง€ ๋ฉด์—์„œ ์ž˜๋ชป๋œ ์ถ”๋ก ์ž„.
      1. ์˜ˆ์™ธ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์— ์“ธ ์šฉ๋„๋กœ ์„ค๊ณ„ ๋˜์—ˆ์œผ๋ฏ€๋กœ JVM ๊ตฌํ˜„์ž ์ž…์žฅ์—์„œ๋Š” ๋ช…ํ™•ํ•œ ๊ฒ€์‚ฌ๋งŒํผ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋™๊ธฐ๊ฐ€ ์•ฝํ•จ. (์ตœ์ ํ™”์— ๋ณ„๋กœ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ์ด ํผ)
      2. ์ฝ”๋“œ๋ฅผ try-catch ๋ธ”๋ก ์•ˆ์— ๋„ฃ์œผ๋ฉด JVM์ด ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ ํ™”๊ฐ€ ์ œํ•œ๋จ.
      3. ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋Š” ํ‘œ์ค€ ๊ด€์šฉ๊ตฌ๋Š” ์•ž์„œ ๊ฑฑ์ •ํ•œ ์ค‘๋ณต ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ. JVM์ด ์•Œ์•„์„œ ์ตœ์ ํ™”ํ•ด ์—†์• ์คŒ.

โ†’ ๊ตํ›ˆ : ์˜ˆ์™ธ๋Š” (๊ทธ ์ด๋ฆ„์ด ๋งํ•ด์ฃผ๋“ฏ) ์˜ค์ง ์˜ˆ์™ธ ์ƒํ™ฉ์—์„œ๋งŒ ์จ์•ผ ํ•œ๋‹ค. ์ ˆ๋Œ€๋กœ ์ผ์ƒ์ ์ธ ์ œ์–ด ํ๋ฆ„์šฉ์œผ๋กœ ์“ฐ์—ฌ์„  ์•ˆ ๋œ๋‹ค.

โ†’ ์ž˜ ์„ค๊ณ„๋œ API๋ผ๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ •์ƒ์ ์ธ ์ œ์–ด ํ๋ฆ„์—์„œ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•  ์ผ์ด ์—†๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.


2. ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ, ์˜ต์…”๋„, ํŠน์ • ๊ฐ’ ์„ ํƒ ์ง€์นจ

  • ์ƒํƒœ ์˜์กด์  ๋ฉ”์„œ๋“œ ex) Iterator ์ธํ„ฐํŽ˜์ด์Šค์˜ next ๋ฉ”์„œ๋“œ
  • ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ ex) Iterator ์ธํ„ฐํŽ˜์ด์Šค์˜ hasNext ๋ฉ”์„œ๋“œ
  1. ์™ธ๋ถ€ ๋™๊ธฐํ™” ์—†์ด ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์™ธ๋ถ€ ์š”์ธ์œผ๋กœ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์˜ต์…”๋„์ด๋‚˜ ํŠน์ • ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค. โ†’ ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ์™€ ์ƒํƒœ ์˜์กด์  ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‚ฌ์ด์— ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ
  2. ์„ฑ๋Šฅ์ด ์ค‘์š”ํ•œ ์ƒํ™ฉ์—์„œ ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒํƒœ ์˜์กด์  ๋ฉ”์„œ๋“œ์˜ ์ž‘์—… ์ผ๋ถ€๋ฅผ ์ค‘๋ณต ์ˆ˜ํ–‰ํ•œ๋‹ค๋ฉด ์˜ต์…”๋„์ด๋‚˜ ํŠน์ • ๊ฐ’์„ ์„ ํƒํ•œ๋‹ค.
  3. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ์—” ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ ๋ฐฉ์‹์ด ์กฐ๊ธˆ ๋” ๋‚ซ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋…์„ฑ์ด ์‚ด์ง ๋” ์ข‹๊ณ , ์ž˜๋ชป ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ๊ฒฌํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ๊นœ๋นก ์žŠ์—ˆ๋‹ค๋ฉด ์ƒํƒœ ์˜์กด์  ๋ฉ”์„œ๋“œ๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ ๋ฒ„๊ทธ๋ฅผ ํ™•์‹คํžˆ ๋“œ๋Ÿฌ๋‚ผ ๊ฒƒ์ž„. โ†’ ๋ฐ˜๋ฉด ํŠน์ • ๊ฐ’์€ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ง€๋‚˜์ณ๋„ ๋ฐœ๊ฒฌํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค(์˜ต์…”๋„์€ ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ).


๐Ÿ’ก ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—๋Š” ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜์—๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

โ€œ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ โ†’ ๊ฒ€์‚ฌ ์˜ˆ์™ธ / ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜ ๋˜๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์„ ๋•Œ โ†’ ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธโ€

1. ๊ฒ€์‚ฌ ์˜ˆ์™ธ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์ผ ๋•Œ ๋ฐœ์ƒ
  • ์‚ฌ์šฉ ์ง€์นจ : ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ๋ณต๊ตฌํ•˜๋ฆฌ๋ผ ์—ฌ๊ฒจ์ง€๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
  • ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋ฉด ํ˜ธ์ถœ์ž๊ฐ€ ๊ทธ ์˜ˆ์™ธ๋ฅผ catch๋กœ ์žก์•„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋” ๋ฐ”๊นฅ์œผ๋กœ ์ „ํŒŒํ•˜๋„๋ก ๊ฐ•์ œํ•˜๊ฒŒ ๋จ.

โ†’ ๋ฉ”์„œ๋“œ ์„ ์–ธ์— ํฌํ•จ๋œ ๊ฒ€์‚ฌ ์˜ˆ์™ธ ๊ฐ๊ฐ์€ ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์œ ๋ ฅํ•œ ๊ฒฐ๊ณผ์ž„์„ API์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ. (API ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ทธ ์ƒํ™ฉ์—์„œ ํšŒ๋ณตํ•ด๋‚ด๋ผ๊ณ  ์š”๊ตฌ)


2. ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ

  • ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋Š” ๋‘ ๊ฐ€์ง€๋กœ, ๊ฐ๊ฐ ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์™€ ์—๋Ÿฌ๋‹ค. ์ด ๋‘˜์€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์žก์„ ํ•„์š”๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ†ต์ƒ์ ์œผ๋กœ ์žก์ง€ ๋ง์•„์•ผ ํ•จ.
  • ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋‚˜ ์—๋Ÿฌ๋ฅผ ๋˜์กŒ๋‹ค๋Š” ๊ฒƒ์€ ๋ณต๊ตฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๋” ์‹คํ–‰ํ•ด๋ด์•ผ ๋“๋ณด๋‹ค๋Š” ์‹ค์ด ๋งŽ๋‹ค๋Š” ๋œป.
  • ์ด๋Ÿฐ throwable์„ ์žก์ง€ ์•Š์€ ์Šค๋ ˆ๋“œ๋Š” ์ ์ ˆํ•œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚ด๋ฑ‰์œผ๋ฉฐ ์ค‘๋‹จ๋จ.
  • ์‚ฌ์šฉ ์ง€์นจ
    1. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜์ž
      • ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์˜ ๋Œ€๋ถ€๋ถ„์€ ์ „์ œ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ–ˆ์„ ๋•Œ ๋ฐœ์ƒ. ex) ArrayIndexOutOfBoundsException
    2. ์—๋Ÿฌ๋Š” ๋ณดํ†ต JVM์ด ์ž์› ๋ถ€์กฑ, ๋ถˆ๋ณ€์‹ ๊นจ์ง ๋“ฑ ๋”์ด์ƒ ์ˆ˜ํ–‰์„ ๊ณ„์†ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์„ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉ
    3. ๋น„๊ฒ€์‚ฌ throwable์€ ๋ชจ๋‘ RuntimeException์˜ ํ•˜์œ„ ํด๋ž˜์Šค์—ฌ์•ผ ํ•จ. (Error๋Š” ์ƒ์†ํ•˜์ง€ ๋ง์•„์•ผ ํ•  ๋ฟ ์•„๋‹ˆ๋ผ, throw ๋ฌธ์œผ๋กœ ์ง์ ‘ ๋˜์ง€๋Š” ์ผ๋„ ์—†์–ด์•ผ ํ•จ.)


๐Ÿ’ก ํ•„์š” ์—†๋Š” ๊ฒ€์‚ฌ ์˜ˆ์™ธ ์‚ฌ์šฉ์€ ํ”ผํ•˜๋ผ

โ€œ์˜ต์…”๋„๋งŒ์œผ๋กœ๋Š” ์ƒํ™ฉ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์—†์„ ๋•Œ๋งŒ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์žโ€

1. ๊ฒ€์‚ฌ ์˜ˆ์™ธ์˜ ์‚ฌ์šฉ

  • ์–ด๋–ค ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์„ ์–ธ๋๋‹ค๋ฉด, ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ์—์„œ๋Š” catch ๋ธ”๋ก์„ ๋‘์–ด ๊ทธ ์˜ˆ์™ธ๋ฅผ ๋ถ™์žก์•„ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ๋” ๋ฐ”๊นฅ์œผ๋กœ ๋˜์ ธ ๋ฌธ์ œ๋ฅผ ์ „ํŒŒํ•ด์•ผ ํ•จ. โ†’ ์–ด๋Š ์ชฝ์ด๋“  API ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€๋‹ด์„ ์คŒ.
  • ๊ฒ€์‚ฌ ์˜ˆ์™ธ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์ง€์šฐ๋Š” ๋ถ€๋‹ด์€ ๋ฉ”์„œ๋“œ๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋งŒ ๋˜์งˆ ๋•Œ๊ฐ€ ํŠนํžˆ ํผ.
    • ๊ฒ€์‚ฌ ์˜ˆ์™ธ๊ฐ€ ๋‹จ ํ•˜๋‚˜๋ฟ์ด๋ผ๋ฉด ์˜ค์ง ๊ทธ ์˜ˆ์™ธ ๋•Œ๋ฌธ์— API ์‚ฌ์šฉ์ž๋Š” try๋ธ”๋ก์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๊ณ  ์ŠคํŠธ๋ฆผ์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋จ.

โ†’ ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ์•ˆ ๋˜์ง€๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋Š”์ง€ ๊ณ ๋ฏผํ•ด๋ณผ ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค.


2. ๊ฒ€์‚ฌ ์˜ˆ์™ธ์˜ ๋Œ€์ฒด์žฌ

  1. ์ ์ ˆํ•œ ๊ฒฐ๊ณผ ํƒ€์ž…์„ ๋‹ด์€ ์˜ต์…”๋„์„ ๋ฐ˜ํ™˜
    • ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๋Œ€์‹  ๋‹จ์ˆœํžˆ ๋นˆ ์˜ต์…”๋„์„ ๋ฐ˜ํ™˜.
    • ์ด ๋ฐฉ์‹์˜ ๋‹จ์ ์€ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ.
  2. ๋ฉ”์„œ๋“œ๋ฅผ 2๊ฐœ๋กœ ์ชผ๊ฐœ ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋กœ ๋ฐ”๊พธ๊ธฐ
// ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๋ฉ”์„œ๋“œ - ๋ฆฌํŒฉํ„ฐ๋ง ์ „
try {
		obj.action(args);
} catch(TheCheckedException e) {
		... // ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€์ฒ˜ํ•œ๋‹ค.
}
// ์ƒํƒœ ๊ฒ€์‚ฌ ๋ฉ”์„œ๋“œ์™€ ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๋Š” ๋ฉ”์„œ๋“œ - ๋ฆฌํŒฉํ„ฐ๋ง ํ›„
if(obj.actionPermitted(args)) {
		obj.action(args);
} else {
		... // ์˜ˆ์™ธ ์ƒํ™ฉ์— ๋Œ€์ฒ˜ํ•œ๋‹ค.
}


๐Ÿ’ก ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

โ€œํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๋ฉด API๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ตํžˆ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์›Œ์งโ€

1. ๋Œ€ํ‘œ์ ์ธ ํ‘œ์ค€ ์˜ˆ์™ธ

์˜ˆ์™ธ์ฃผ์š” ์“ฐ์ž„
IllegalArgumentExceptionํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ’์ด ์ธ์ˆ˜๋กœ ๊ฑด๋„ค์กŒ์„ ๋•Œ(null์€ ๋”ฐ๋กœ NullPointerException์œผ๋กœ ์ฒ˜๋ฆฌ)
IllegalStateException๊ฐ์ฒด๊ฐ€ ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ์— ์ ์ ˆํ•˜์ง€ ์•Š์€ ์ƒํƒœ์ผ ๋•Œ
NullPointerExceptionnull์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— null์„ ๊ฑด๋„ธ์„ ๋•Œ
IndexOutOfBoundsException์ธ๋ฑ์Šค๊ฐ€ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ฐ์„ ๋•Œ
ConcurrentModificationExceptionํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋™์‹œ ์ˆ˜์ •์ด ๋ฐœ๊ฒฌ๋์„ ๋•Œ
UnsupportedOperationExceptionํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๋•Œ
  • ์ƒํ™ฉ์— ๋ถ€ํ•ฉํ•œ๋‹ค๋ฉด ํ•ญ์ƒ ํ‘œ์ค€ ์˜ˆ์™ธ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜์ž

โ€ป Exception, RuntimeException, Throwable, Error๋Š” ์ง์ ‘ ์žฌ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž


2. IllegalArgumentException vs IllegalStateException

  • ์œ„์˜ ํ‘œ๋กœ ์ •๋ฆฌํ•œ โ€˜์ฃผ์š” ์“ฐ์ž„โ€™์ด ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ด์ง€ ์•Š์€ ํƒ“์—, ์ข…์ข… ์žฌ์‚ฌ์šฉํ•  ์˜ˆ์™ธ๋ฅผ ์„ ํƒํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์šธ ๋•Œ๋„ ์žˆ์Œ

  • ex) ์นด๋“œ ๋ฑ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ๊ณ , ์ธ์ˆ˜๋กœ ๊ฑด๋„จ ์ˆ˜๋งŒํผ์˜ ์นด๋“œ๋ฅผ ๋ฝ‘์•„ ๋‚˜๋ˆ ์ฃผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ์ด๋•Œ ๋ฑ์— ๋‚จ์•„ ์žˆ๋Š” ์นด๋“œ ์ˆ˜๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฑด๋„ค๋ฉด ์–ด๋–ค ์˜ˆ์™ธ๋ฅผ ๋˜์ ธ์•ผ ํ• ๊นŒ?

    • ์ธ์ˆ˜์˜ ๊ฐ’์ด ๋„ˆ๋ฌด ํฌ๋‹ค๊ณ  ๋ณธ๋‹ค๋ฉด IllegalArgumentException, ๋ฑ์— ๋‚จ์€ ์นด๋“œ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ์ ๋‹ค๊ณ  ๋ณด๋ฉด IllegalStateException ๋ฅผ ์„ ํƒํ•  ๊ฒƒ์ž„.
  • ์œ„์˜ ์ƒํ™ฉ์—์„œ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

    • ์ธ์ˆ˜ ๊ฐ’์ด ๋ฌด์—‡์ด์—ˆ๋“  ์–ด์ฐจํ”ผ ์‹คํŒจํ–ˆ์„๊ฑฐ๋ผ๋ฉด IllegalStateException , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด IllegalArgumentException ์„ ๋˜์ง€์ž.


๐Ÿ’ก ์ถ”์ƒํ™” ์ˆ˜์ค€์— ๋งž๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง€์ž

โ€œ์•„๋ž˜ ๊ณ„์ธต์˜ ์˜ˆ์™ธ๋ฅผ ์˜ˆ๋ฐฉํ•˜๊ฑฐ๋‚˜ ์Šค์Šค๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ณ ,
๊ทธ ์˜ˆ์™ธ๋ฅผ ์ƒ์œ„ ๊ณ„์ธต์— ๊ทธ๋Œ€๋กœ ๋…ธ์ถœํ•˜๊ธฐ ๊ณค๋ž€ํ•˜๋‹ค๋ฉด ์˜ˆ์™ธ ๋ฒˆ์—ญ์„ ์‚ฌ์šฉํ•˜๋ผโ€

1. ์˜ˆ์™ธ ๋ฒˆ์—ญ

  • ์˜ˆ์™ธ ๋ฒˆ์—ญ(excepton translation) : ์ƒ์œ„ ๊ณ„์ธต์—์„œ ์ €์ˆ˜์ค€ ์˜ˆ์™ธ๋ฅผ ์žก์•„ ์ž์‹ ์˜ ์ถ”์ƒํ™” ์ˆ˜์ค€์— ๋งž๋Š” ์˜ˆ์™ธ๋กœ ๋ฐ”๊ฟ” ๋˜์ง€๋Š” ๊ฒƒ
try {
		... // ์ €์ˆ˜์ค€ ์ถ”์ƒํ™”๋ฅผ ์ด์šฉํ•œ๋‹ค.
} catch(LowerLevelException e) {
		// ์ถ”์ƒํ™” ์ˆ˜์ค€์— ๋งž๊ฒŒ ๋ฒˆ์—ญํ•œ๋‹ค.
		throw new HigherLevelException(...);
}

2. ์˜ˆ์™ธ ์—ฐ์‡„

  • ์˜ˆ์™ธ ์—ฐ์‡„(exception chaining) : ๋ฌธ์ œ์˜ ๊ทผ๋ณธ ์›์ธ(cause)์ธ ์ €์ˆ˜์ค€ ์˜ˆ์™ธ๋ฅผ ๊ณ ์ˆ˜์ค€ ์˜ˆ์™ธ์— ์‹ค์–ด ๋ณด๋‚ด๋Š” ๋ฐฉ์‹.
try {
		... // ์ €์ˆ˜์ค€ ์ถ”์ƒํ™”๋ฅผ ์ด์šฉํ•œ๋‹ค.
} catch(LowerLevelException cause) {
		// ์ €์ˆ˜์ค€ ์˜ˆ์™ธ๋ฅผ ๊ณ ์ˆ˜์ค€ ์˜ˆ์™ธ์— ์‹ค์–ด ๋ณด๋‚ธ๋‹ค.
		throw new HigherLevelException(cause);
}

// ์˜ˆ์™ธ ์—ฐ์‡„์šฉ ์ƒ์„ฑ์ž
class HigherLevelException extends Exception {
		HigherLevelException(Throwable cause) {
				super(cause);
		}
}
  • ๊ณ ์ˆ˜์ค€ ์˜ˆ์™ธ์˜ ์ƒ์„ฑ์ž๋Š” (์˜ˆ์™ธ ์—ฐ์‡„์šฉ์œผ๋กœ ์„ค๊ณ„๋œ) ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž์— ์ด โ€˜์›์ธโ€™์„ ๊ฑด๋„ค์ฃผ์–ด, ์ตœ์ข…์ ์œผ๋กœ Throwable(Throwable) ์ƒ์„ฑ์ž๊นŒ์ง€ ๊ฑด๋„ค์ง€๊ฒŒ ํ•œ๋‹ค.

3. ๊ถŒ์žฅ

โ†’ ๋ฌดํ„ฑ๋Œ€๊ณ  ์˜ˆ์™ธ๋ฅผ ์ „ํŒŒํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค์•ผ ์˜ˆ์™ธ ๋ฒˆ์—ญ์ด ์šฐ์ˆ˜ํ•œ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ, ๊ทธ๋ ‡๋‹ค๊ณ  ๋‚จ์šฉํ•ด์„œ๋Š” ๊ณค๋ž€ํ•จ.

  • ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ์ €์ˆ˜์ค€ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์„ฑ๊ณตํ•˜๋„๋ก ํ•˜์—ฌ ์•„๋ž˜ ๊ณ„์ธต์—์„œ๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ตœ์„ 
    • ๋•Œ๋ก  ์ƒ์œ„ ๊ณ„์ธต์˜ ๋ฉ”์„œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ์•„๋ž˜ ๊ณ„์ธต ๋ฉ”์„œ๋“œ๋กœ ๊ฑด๋„ค๊ธฐ ์ „์— ๋ฏธ๋ฆฌ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ด ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ
  • ์•„๋ž˜ ๊ณ„์ธต์—์„œ ์˜ˆ์™ธ๋ฅผ ํ”ผํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ์ƒ์œ„ ๊ณ„์ธต์—์„œ ๊ทธ ์˜ˆ์™ธ๋ฅผ ์กฐ์šฉํžˆ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ API ํ˜ธ์ถœ์ž์—๊นŒ์ง€ ์ „ํŒŒํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•.
    • ์ด ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋Š” java.util.logging ๊ฐ™์€ ์ ์ ˆํ•œ ๋กœ๊น… ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๊ธฐ๋กํ•ด๋‘๋ฉด ์ข‹์Œ.


๐Ÿ’ก ๋ฉ”์„œ๋“œ๊ฐ€ ๋˜์ง€๋Š” ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๋ผ

โ€œ๋ฐœ์ƒ ๊ฐ€๋Šฅํ•œ ์˜ˆ์™ธ๋ฅผ ๋ฌธ์„œ๋กœ ๋‚จ๊ธฐ์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ทธ ํด๋ž˜์Šค๋‚˜
์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ต๊ฑฐ๋‚˜ ์‹ฌ์ง€์–ด ๋ถˆ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.โ€

  • ๊ฒ€์‚ฌ ์˜ˆ์™ธ๋Š” ํ•ญ์ƒ ๋”ฐ๋กœ๋”ฐ๋กœ ์„ ์–ธํ•˜๊ณ , ๊ฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์„ ์ž๋ฐ”๋…์˜ @throw ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •ํ™•ํžˆ ๋ฌธ์„œํ™”ํ•˜์ž
  • public ๋ฉ”์„œ๋“œ๋ผ๋ฉด ํ•„์š”ํ•œ ์ „์ œ์กฐ๊ฑด์„ ๋ฌธ์„œํ™”ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ทธ ์ˆ˜๋‹จ์œผ๋กœ ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์ด ๋ฐ”๋กœ ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋“ค์„ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ž„.
  • ๋ฉ”์„œ๋“œ๊ฐ€ ๋˜์งˆ ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ๋ฅผ ๊ฐ๊ฐ @throw ํƒœ๊ทธ๋กœ ๋ฌธ์„œํ™”ํ•˜๋˜, ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ๋Š” ๋ฉ”์„œ๋“œ ์„ ์–ธ์˜ throws ๋ชฉ๋ก์— ๋„ฃ์ง€ ๋ง์ž.
    • ๊ฒ€์‚ฌ ์˜ˆ์™ธ : ๋ฉ”์„œ๋“œ ์„ ์–ธ์˜ thorws ์ ˆ์— ๋“ฑ์žฅ O && ๋ฉ”์„œ๋“œ ์ฃผ์„์˜ @throw ํƒœ๊ทธ์— ๋ช…์‹œ O
    • ๋น„๊ฒ€์‚ฌ ์˜ˆ์™ธ : ๋ฉ”์„œ๋“œ ์„ ์–ธ์˜ thorws ์ ˆ์— ๋“ฑ์žฅ X && ๋ฉ”์„œ๋“œ ์ฃผ์„์˜ @throw ํƒœ๊ทธ์— ๋ช…์‹œ O
    • ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์—ฌ ์ž‘์„ฑํ•˜๋ฉด ์ž๋ฐ”๋… ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์คŒ.
  • ํ•œ ํด๋ž˜์Šค์— ์ •์˜๋œ ๋งŽ์€ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฐ™์€ ์ด์œ ๋กœ ๊ฐ™์€ ์˜ˆ์™ธ๋ฅผ ๋˜์ง„๋‹ค๋ฉด ๊ทธ ์˜ˆ์™ธ๋ฅผ (๊ฐ๊ฐ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์•„๋‹Œ) ํด๋ž˜์Šค ์„ค๋ช…์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Œ.
    • ex) โ€œ์ด ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ์ธ์ˆ˜๋กœ null์ด ๋„˜์–ด์˜ค๋ฉด NullPointerException์„ ๋˜์ง„๋‹ค.โ€


๐Ÿ’ก ์˜ˆ์™ธ์˜ ์ƒ์„ธ ๋ฉ”์‹œ์ง€์— ์‹คํŒจ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋‹ด์œผ๋ผ

โ€œ์‚ฌํ›„ ๋ถ„์„์„ ์œ„ํ•ด ์‹คํŒจ ์ˆœ๊ฐ„์˜ ์ƒํ™ฉ์„ ์ •ํ™•ํžˆ ํฌ์ฐฉํ•ด ์˜ˆ์™ธ์˜ ์ƒ์„ธ ๋ฉ”์‹œ์ง€์— ๋‹ด์•„์•ผ ํ•จโ€

  • ์˜ˆ์™ธ๋ฅผ ์žก์ง€ ๋ชปํ•ด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํŒจํ•˜๋ฉด ์ž๋ฐ” ์‹œ์Šคํ…œ์€ ๊ทธ ์˜ˆ์™ธ์˜ ์Šคํƒ ์ถ”์ (stack trace) ์ •๋ณด๋ฅผ ์ž๋™์œผ๋กœ ์ถœ๋ ฅํ•จ.
    • ์Šคํƒ ์ถ”์ ์€ ์˜ˆ์™ธ ๊ฐ์ฒด์˜ toString ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์–ป๋Š” ๋ฌธ์ž์—ด๋กœ, ๋ณดํ†ต์€ ์˜ˆ์™ธ์˜ ํด๋ž˜์Šค ์ด๋ฆ„ ๋’ค์— ์ƒ์„ธ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ถ™๋Š” ํ˜•ํƒœ.
  • ์‹คํŒจ ์ˆœ๊ฐ„์„ ํฌ์ฐฉํ•˜๋ ค๋ฉด ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์— ๊ด€์—ฌ๋œ ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ•„๋“œ์˜ ๊ฐ’์„ ์‹คํŒจ ๋ฉ”์‹œ์ง€์— ๋‹ด์•„์•ผ ํ•จ.
    • ex) IndexOutOfBoundsException ์˜ ์ƒ์„ธ ๋ฉ”์‹œ์ง€๋Š” ๋ฒ”์œ„์˜ ์ตœ์†Ÿ๊ฐ’๊ณผ ์ตœ๋Œ“๊ฐ’, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๋‹ค๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ๋‹ด์•„์•ผ ํ•จ.
    • but, ์ƒ์„ธ ๋ฉ”์‹œ์ง€์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ์•”ํ˜ธ ํ‚ค ๊ฐ™์€ ์ •๋ณด๊นŒ์ง€ ๋‹ด์•„์„œ๋Š” ์•ˆ ๋จ.
  • ์˜ˆ์™ธ์˜ ์ƒ์„ธ ๋ฉ”์‹œ์ง€์™€ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค„ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ˜ผ๋™ํ•ด์„œ๋Š” ์•ˆ ๋จ.
    • ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์นœ์ ˆํ•œ ๋ฉ”์‹œ์ง€๋กœ ์ž‘์„ฑ, ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€๋Š” ์ฃผ ์†Œ๋น„์ธต์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์ž„์„ ๊ณ ๋ คํ•˜์—ฌ ์ž‘์„ฑ.
  • ์˜ˆ์™ธ๋Š” ์‹คํŒจ์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ ‘๊ทผ์ž ๋ฉ”์„œ๋“œ๋ฅผ ์ ์ ˆํžˆ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ.


๐Ÿ’ก ๊ฐ€๋Šฅํ•œ ํ•œ ์‹คํŒจ ์›์ž์ ์œผ๋กœ ๋งŒ๋“ค๋ผ

โ€œ๋ฉ”์„œ๋“œ ๋ช…์„ธ์— ๊ธฐ์ˆ ํ•œ ์˜ˆ์™ธ๋ผ๋ฉด ์„คํ˜น ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ๊ฐ์ฒด์˜ ์ƒํƒœ๋Š”
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „๊ณผ ๋˜‘๊ฐ™์ด ์œ ์ง€๋ผ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๊ธฐ๋ณธ ๊ทœ์น™โ€

1. ์‹คํŒจ ์›์ž์ ์ด๋ž€?

  • ์‹คํŒจ ์›์ž์ (failure-atomic) : ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋”๋ผ๋„ ํ•ด๋‹น ๊ฐ์ฒด๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ „ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•จ.
  • ์‹คํŒจ ์›์ž์ ์ด๋ผ๋ฉด ์ž‘์—… ๋„์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๊ทธ ๊ฐ์ฒด๋Š” ์—ฌ์ „ํžˆ ์ •์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์ž„.
  • ์‹คํŒจ ์›์ž์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋ฉด ์‹คํŒจ ์‹œ์˜ ๊ฐ์ฒด ์ƒํƒœ๋ฅผ API ์„ค๋ช…์— ๋ช…์‹œํ•ด์•ผ ํ•จ.

2. ์‹คํŒจ ์›์ž์ ์„ ์–ป๋Š” ๋ฐฉ๋ฒ•

  1. ๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ์„ค๊ณ„
    • ๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ํƒœ์ƒ์ ์œผ๋กœ ์‹คํŒจ ์›์ž์ ์ž„.
    • ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€์ง€๋Š” ์•Š์„ ์ˆ˜ ์žˆ์œผ๋‚˜ ๊ธฐ์กด ๊ฐ์ฒด๊ฐ€ ๋ถˆ์•ˆ์ •ํ•œ ์ƒํƒœ์— ๋น ์ง€๋Š” ์ผ์€ ๊ฒฐ์ฝ” ์—†์Œ. โ†’ ๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ์ƒํƒœ๋Š” ์ƒ์„ฑ ์‹œ์ ์— ๊ณ ์ •๋˜์–ด ์ ˆ๋Œ€ ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
  2. ์ž‘์—… ์ˆ˜ํ–‰์— ์•ž์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌ
    • ๊ฐ์ฒด์˜ ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์ „์— ์ž ์žฌ์  ์˜ˆ์™ธ์˜ ๊ฐ€๋Šฅ์„ฑ์„ ๋Œ€๋ถ€๋ถ„ ๊ฑธ๋Ÿฌ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•
    • ๋น„์Šทํ•œ ์ทจ์ง€๋กœ ์‹คํŒจํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ, ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋Š” ์ฝ”๋“œ๋ณด๋‹ค ์•ž์— ๋ฐฐ์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Œ
  3. ๊ฐ์ฒด์˜ ์ž„์‹œ ๋ณต์‚ฌ๋ณธ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ, ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ์›๋ž˜ ๊ฐ์ฒด์™€ ๊ต์ฒด
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ ์ž๋ฃŒ๊ตฌ์กฐ์— ์ €์žฅํ•ด ์ž‘์—…ํ•˜๋Š” ๊ฒŒ ๋” ๋น ๋ฅผ ๋•Œ ์ ์šฉํ•˜๊ธฐ ์ข‹์€ ๋ฐฉ์‹.
  4. ์ž‘์—… ๋„์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์‹คํŒจ๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” ๋ณต๊ตฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ž‘์—… ์ „ ์ƒํƒœ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ
    • ์ฃผ๋กœ (๋””์Šคํฌ ๊ธฐ๋ฐ˜์˜) ๋‚ด๊ตฌ์„ฑ(durability)์„ ๋ณด์žฅํ•ด์•ผ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์— ์“ฐ์ž„.


๐Ÿ’ก ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜์ง€ ๋ง๋ผ

โ€œ catch ๋ธ”๋ก์„ ๋น„์›Œ๋‘์ง€ ๋ง์žโ€

  • ์˜ˆ์™ธ๋Š” ๋ฌธ์ œ ์ƒํ™ฉ์— ์ž˜ ๋Œ€์ฒ˜ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋Š”๋ฐ, catch ๋ธ”๋ก์„ ๋น„์›Œ๋‘๋ฉด ์˜ˆ์™ธ๊ฐ€ ์กด์žฌํ•  ์ด์œ ๊ฐ€ ์—†์–ด์ง.
    • ๋น„์œ ํ•˜์ž๋ฉด ํ™”์žฌ๊ฒฝ๋ณด๋ฅผ ๋ฌด์‹œํ•˜๋Š” ์ˆ˜์ค€์„ ๋„˜์–ด ์•„์˜ˆ ๊บผ๋ฒ„๋ ค, ๋‹ค๋ฅธ ๋ˆ„๊ตฌ๋„ ํ™”์žฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ์•Œ์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ.
  • ์˜ˆ์™ธ๋ฅผ ๋ฌด์‹œํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค๋ฉด catch ๋ธ”๋ก ์•ˆ์— ๊ทธ๋ ‡๊ฒŒ ๊ฒฐ์ •ํ•œ ์ด์œ ๋ฅผ ์ฃผ์„์œผ๋กœ ๋‚จ๊ธฐ๊ณ  ์˜ˆ์™ธ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„๋„ ignored ๋กœ ๋ฐ”๊ฟ”๋†“๋„๋ก ํ•˜์ž.
  • ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์ด๋“  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ค๋ฅ˜๋“ , ๋นˆ catch ๋ธ”๋ก์œผ๋กœ ๋ชป ๋ณธ ์ฒ™ ์ง€๋‚˜์น˜๋ฉด ๊ทธ ํ”„๋กœ๊ทธ๋žจ์€ ์˜ค๋ฅ˜๋ฅผ ๋‚ด์žฌํ•œ ์ฑ„ ๋™์ž‘ํ•˜๊ฒŒ ๋จ.

โ†’ ๋ฌด์‹œํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๊นฅ์œผ๋กœ ์ „ํŒŒ๋˜๊ฒŒ๋งŒ ๋†”๋‘ฌ๋„ ์ตœ์†Œํ•œ ๋””๋ฒ„๊น… ์ •๋ณด๋ฅผ ๋‚จ๊ธด ์ฑ„ ํ”„๋กœ๊ทธ๋žจ์ด ์‹ ์†ํžˆ ์ค‘๋‹จ๋˜๊ฒŒ๋Š” ํ•  ์ˆ˜ ์žˆ๋‹ค

์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ