JavaRush /Java Blog /Random-KO /์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #220. Java์—์„œ ์˜ˆ์™ธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ž์„ธํ•œ ๊ฐ€์ด๋“œ

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #220. Java์—์„œ ์˜ˆ์™ธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ž์„ธํ•œ ๊ฐ€์ด๋“œ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
์ถœ์ฒ˜: JavaTechOnline ์ด ํŠœํ† ๋ฆฌ์–ผ์€ Java์—์„œ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ก  ์™ธ์—๋„ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #220.  Java์—์„œ ์˜ˆ์™ธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• - ์ƒ์„ธ ์•ˆ๋‚ด์„œ - 1๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Java ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ์˜ค๋ฅ˜๋‚˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ž‘์—… ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋ฏ€๋กœ ์˜ˆ์™ธ๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฝ๊ฐ„์˜ ์ง€์‹๋งŒ ์žˆ์œผ๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ ๋Œ€๋ถ€๋ถ„์˜ ํ•ด๊ฒฐ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ, Java์—์„œ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…์‹œ๋‹ค.

Java์—์„œ ์˜ˆ์™ธ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜ ์ง€์นจ

Java์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ์ฝ”๋”ฉ ์ง€์นจ์„ ์ดํ•ดํ•˜๊ณ  ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  1. ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ํ•ญ์ƒ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜์‹ญ์‹œ์˜ค.
  2. ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•œ ๊ฒƒ์— ๋”ฐ๋ผ try-catch , throws , throw block ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค .
  3. ์ฒ˜๋ฆฌ ๋ฐ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ์ฝ”๋“œ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฌด์‹œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด๋Š” ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
  4. ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ๊ธฐ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋กœ๊ฑฐ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  5. ์˜ˆ์™ธ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ์ฒ ์ €ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ์ฝ”๋”ฉ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
  6. ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ์ตœ์‹  ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด API ์ข…์†์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜์„ธ์š”.
  7. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๋„๊ตฌ์™€ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ์˜ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๋ฅผ ์‹๋ณ„ํ•˜์„ธ์š”.
  8. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ๊ณผ ๋กœ๊ทธ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ณ  ํ•ด๊ฒฐํ•˜์„ธ์š”.
  9. ์ฝ”๋“œ๊ฐ€ ์•ˆ์ „ํ•˜๊ณ  ์ž ์žฌ์ ์ธ ๊ณต๊ฒฉ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ๋˜๋„๋ก ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜์„ธ์š”.
  10. ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฝ”๋“œ์™€ ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ์ฒ ์ €ํ•˜๊ฒŒ ๋ฌธ์„œํ™”ํ•˜์„ธ์š”.

Java์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ ๋ชฉ๋ก

Java์—๋Š” ์ƒ๋‹นํžˆ ๊ธด ์˜ˆ์™ธ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

NullPointer์˜ˆ์™ธ

NullPointerException์€ RuntimeException ์˜ˆ์™ธ ์˜ ํ•œ ์œ ํ˜•์ž…๋‹ˆ๋‹ค . null ๊ฐ’์ด ์žˆ๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ’์ด null ์ธ ๊ฐœ์ฒด๋‚˜ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค . ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๊ฑฐ๋‚˜ ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๊ฐœ์ฒด์˜ ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋˜๋Š” ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— null์„ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ „๋‹ฌํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NullPointerException์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด == ์—ฐ์‚ฐ์ž ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ null์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด ๊ฒฝ์šฐ null ์‚ฌ๋ก€๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ null ์ฐธ์กฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. NullPointerException์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ Optional ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค . Java์—์„œ Optional์€ null์ด ์•„๋‹Œ ๊ฐ’์„ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. null ๊ฐ’์ด ๊ฐ’์˜ ๋ถ€์žฌ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ฐ’์˜ ์œ ๋ฌด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ Optional ๊ฐœ์ฒด ์˜ ๋นˆ ๊ฐ’์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ NullPointerException์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋Œ€์‹  ๋นˆ Optional ๊ฐœ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค . ์ฆ‰, Optional์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ฐ’์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ฐ•์ œํ•˜์—ฌ NullPointerException์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค .

IndexOutOfBoundsException

IndexOutOfBoundsException์€ ๋ฐฐ์—ด ๋˜๋Š” ์ปฌ๋ ‰์…˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ์ธ๋ฑ์Šค๊ฐ€ ์Œ์ˆ˜์ด๊ฑฐ๋‚˜ ๋ฐฐ์—ด ๋˜๋Š” ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋ ค๋ฉด ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค๊ฐ€ ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ธ๋ฑ์Šค๋Š” 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ  ๋ฐฐ์—ด์ด๋‚˜ ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException ์€ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ๋ฑ์Šค์˜ ๋ฐฐ์—ด์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” IndexOutOfBoundsException ์œ ํ˜•์ž…๋‹ˆ๋‹ค . Java์—์„œ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋Š” 0 ์—์„œ ์‹œ์ž‘ ํ•˜๊ณ  length()-1 ์—์„œ ๋๋‚ฉ๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์„œ length() ๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„ ๋ฐ–์˜ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์š”์†Œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด Java๋Š” ArrayIndexOutOfBoundsException ์„ ๋ฐœ์ƒ ์‹œํ‚ต๋‹ˆ๋‹ค . ArrayIndexOutOfBoundsException ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์•ก์„ธ์Šคํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

StringIndexOutOfBoundsException

StringIndexOutOfBoundsException์€ ์ž˜๋ชป๋œ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” IndexOutOfBoundsException ์œ ํ˜• ์ž…๋‹ˆ๋‹ค . ์ด์ „ ArrayIndexOutOfBoundsException ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Java์—์„œ ๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค๋Š” 0 ์—์„œ ์‹œ์ž‘ํ•˜๊ณ  length()-1 ์—์„œ ๋๋‚ฉ๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์„œ length() ๋Š” ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ๋ฒ”์œ„ ๋ฐ–์˜ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฌธ์ž์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋ฉด StringIndexOutOfBoundsException ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . StringIndexOutOfBoundsException์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž์— ์•ก์„ธ์Šคํ•  ๋•Œ ์˜ฌ๋ฐ”๋ฅธ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์Šค์บ์ŠคํŠธ์˜ˆ์™ธ

์ด ์˜ˆ์™ธ๋Š” ์‹ค์ œ ์œ ํ˜•๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์œ ํ˜•์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์บ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด Java ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐœ์ฒด๊ฐ€ ์ธ์Šคํ„ด์Šค์ธ ํด๋ž˜์Šค์—๋งŒ ๊ฐœ์ฒด๋ฅผ โ€‹โ€‹์บ์ŠคํŒ…ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์บ์ŠคํŠธ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์ „์— instanceof ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ์œ ํ˜•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

IllegalArgumentException

IllegalArgumentException์€ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ถˆ๋ฒ•์ ์ด๊ฑฐ๋‚˜ ๋ถ€์ ์ ˆํ•œ ์ธ์ˆ˜๋กœ ํ˜ธ์ถœ๋  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” RuntimeException ์œ ํ˜•์ž…๋‹ˆ๋‹ค . ์ฆ‰, ์ด ์˜ค๋ฅ˜๋Š” ์˜ˆ์ƒ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๊ฑฐ๋‚˜ ์˜ˆ์ƒ ํ˜•์‹์ด๋‚˜ ๊ตฌ์กฐ๊ฐ€ ์—†๋Š” ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฉ”์„œ๋“œ์— ์ธ์ˆ˜๋กœ ์–‘์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๊ณ  ์Œ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” ์ž˜๋ชป๋œ ์ž…๋ ฅ์ž…๋‹ˆ๋‹ค. IllegalArgumentException์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์œ ํšจํ•˜๊ณ  ์ ์ ˆํ•œ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IllegalStateException

IllegalStateException์€ ๊ฐ์ฒด๊ฐ€ ์ˆ˜ํ–‰ ์ค‘์ธ ์ž‘์—…์— ๋ถ€์ ์ ˆํ•œ ์ƒํƒœ์— ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” RuntimeException ์œ ํ˜•์ž…๋‹ˆ๋‹ค . ์ด๋Š” ์˜ˆ์ƒ๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๋‹ซ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ซํžŒ ์—ฐ๊ฒฐ์—์„œ Statement ๊ฐœ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ ค๊ณ  ํ•˜๋ฉด createStatement() ๋ฉ”์„œ๋“œ์— ์—ด๋ฆฐ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— IllegalStateException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. IllegalStateException์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•˜์—ฌ ์ ์ ˆํ•œ ์ƒํƒœ์— ์žˆ๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง€์›๋˜์ง€ ์•Š๋Š” ์ž‘์—…์˜ˆ์™ธ

UnsupportedOperationException์€ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ์ง€์›๋˜์ง€ ์•Š๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” RuntimeException ์œ ํ˜• ์ž…๋‹ˆ๋‹ค . ์ด ์˜ค๋ฅ˜๋Š” ๊ฐ์ฒด์—์„œ ๊ตฌํ˜„๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฐ์ฒด์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ๊ฐ์ฒด์—์„œ ์ง€์›๋˜์ง€ ์•Š๋Š” ์ž‘์—…์„ ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ์ž‘์—…์„ ์ง€์›ํ•˜๋Š” ๊ฐœ์ฒด์— ๋Œ€ํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฐ์ˆ  ์˜ˆ์™ธ

ArithmeticException์€ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” RuntimeException ์˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค . ์ด ์˜ˆ์™ธ๋Š” ์œ ํšจํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์œ ํšจํ•˜์ง€ ์•Š์€ ์ธ์ˆ˜๋กœ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 0์œผ๋กœ ๋‚˜๋ˆ„๋ ค๊ณ  ํ•  ๋•Œ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์ธ์ˆ˜๊ฐ€ ํ•„์ˆ˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ์˜ˆ์™ธ

SecurityException ์€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ๋ณด์•ˆ ์œ„๋ฐ˜์ด ๋ฐœ์ƒํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” RuntimeException ์œ ํ˜•์ž…๋‹ˆ๋‹ค . ์ด ์˜ค๋ฅ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ณด์•ˆ ์ •์ฑ…์—์„œ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ํŠน์ • ๊ถŒํ•œ์ด ์žˆ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฒˆํ˜ธํ˜•์‹์˜ˆ์™ธ

NumberFormatException์€ ๋ฌธ์ž์—ด์„ ์ˆซ์ž ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ–ˆ์ง€๋งŒ ๋ฌธ์ž์—ด์ด ์ ์ ˆํ•œ ํ˜•์‹์ด ์•„๋‹Œ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” RuntimeException ์œ ํ˜•์ž…๋‹ˆ๋‹ค . ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋จผ์ € ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ณ€ํ™˜ํ•˜๊ธฐ ์ „์— ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์—ฌ ๋Œ€์ƒ ์ˆซ์ž ์œ ํ˜•์— ๋งž๊ฒŒ ํ˜•์‹์ด ์ง€์ •๋œ ๋ฌธ์ž์—ด์„ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

์ค‘๋‹จ๋œ ์˜ˆ์™ธ

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

FileNotFoundException

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

IO์˜ˆ์™ธ

IOException์€ ํŒŒ์ผ์ด๋‚˜ ๋„คํŠธ์›Œํฌ ์†Œ์ผ“์— ๋Œ€ํ•œ ์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ์™€ ๊ฐ™์€ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Java์˜ ํ™•์ธ๋œ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ง€์ •๋œ ํŒŒ์ผ์ด ์—†๊ฑฐ๋‚˜ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ ๋˜๋Š” ๊ถŒํ•œ ๋ถ€์กฑ ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ด์œ ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ™•์ธ, try-catch ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ , ๋ฆฌ์†Œ์Šค ๋‹ซ๊ธฐ, ํŒŒ์ผ ๊ถŒํ•œ ํ™•์ธ ๋“ฑ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

NoSuchMethodException

NoSuchMethodException์€ ํด๋ž˜์Šค์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋Ÿฐํƒ€์ž„์— ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Class.getMethod() ๋˜๋Š” Class.getDeclaredMethod() ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•˜๊ณ  ์ง€์ •๋œ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์—†๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. java.lang.reflect.Method ํด๋ž˜์Šค ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ง€์ •๋œ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ๊ฐ์ฒด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋ฉ”์„œ๋“œ ์„œ๋ช…๊ณผ ์•ก์„ธ์Šค ์ง€์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํšจํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

NoSuchFieldException

NoSuchFieldException์€ ํด๋ž˜์Šค์— ์—†๋Š” ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Class.getField() ๋˜๋Š” Class.getDeclaredField()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœ ํ•˜๊ณ  ์ง€์ •๋œ ํ•„๋“œ ์ด๋ฆ„์ด ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์—†์„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ java.lang.reflect.Field ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ ์ง€์ •๋œ ํ•„๋“œ ์ด๋ฆ„์ด ๊ฐ์ฒด์— ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์ด๋ฆ„๊ณผ ์•ก์„ธ์Šค ํ•œ์ •์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํšจํ•œ ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ๋น„๊ณต๊ฐœ ํ•„๋“œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ getField() ๋ฉ”์„œ๋“œ ๋Œ€์‹  getDeclaredField() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค .

๋ถˆ๋ฒ•์ ‘๊ทผ์˜ˆ์™ธ

IllegalAccessException์€ ํด๋ž˜์Šค์˜ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ์—†์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด ์˜ˆ์™ธ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ์ „์šฉ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋˜๋Š” ์›๋ž˜ ํด๋ž˜์Šค์˜ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์—์„œ ๋ณดํ˜ธ๋œ ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ java.lang.reflect.AccessibleObject ํด๋ž˜์Šค ์— ์˜ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์œผ๋กœ ํ‘œ์‹œ๋œ ํ•„๋“œ๋‚˜ ๋ฉ”์†Œ๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํ˜ธ์ถœ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค . ์ด ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ํ•„๋“œ ๋˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•„์š”ํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ํ•„๋“œ๋‚˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋น„๊ณต๊ฐœ์ธ ๊ฒฝ์šฐ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  AccessibleObject๋ฅผ true ๋กœ ์„ค์ •ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (์•ก์„ธ์Šคํ•˜๋ ค๋ฉด). ๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ผ์ด๋น— ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์— ์•ก์„ธ์Šคํ•  ๋•Œ๋Š” ์ฃผ์˜ํ•˜์„ธ์š”. ์บก์Šํ™”๊ฐ€ ์ค‘๋‹จ๋˜๊ณ  ํด๋ž˜์Šค์˜ ๋ฌด๊ฒฐ์„ฑ์ด ์†์ƒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ™•์ธ์˜ค๋ฅ˜

verifyError๋Š” LinkageError์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ธ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค . ์ด๋Š” JVM(Java Virtual Machine)์ด ํŠน์ • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜๋Š” ํด๋ž˜์Šค ํŒŒ์ผ์„ ๋ฐœ๊ฒฌํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Java ํด๋ž˜์Šค๊ฐ€ ์ปดํŒŒ์ผ๋˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ๊ฐ€ ์œ ํ˜• ์•ˆ์ „์„ฑ, ์Šคํƒ ๋ฐ ์ง€์—ญ ๋ณ€์ˆ˜์˜ ์ ์ ˆํ•œ ์‚ฌ์šฉ๊ณผ ๊ฐ™์€ ํŠน์ • ๊ทœ์น™ ๋ฐ ์ œํ•œ ์‚ฌํ•ญ์„ ๋”ฐ๋ฅด๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํด๋ž˜์Šค ํŒŒ์ผ์ด ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜๋Š” ๊ฒฝ์šฐ JVM์€ ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค๋ฅผ ๋กœ๋“œํ•˜๊ณ  ํ™•์ธํ•  ๋•Œ verifyError๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. verifyError ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ฝ”๋“œ๊ฐ€ Java ์–ธ์–ด์˜ ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ๋ฌธ๊ณผ ์˜๋ฏธ๋ฅผ ๋”ฐ๋ฅด๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. verifyError ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ์œ ํšจํ•œ์ง€, Java ๋ฐ”์ดํŠธ์ฝ”๋“œ ํ™•์ธ ๊ทœ์น™์„ ์œ„๋ฐ˜ํ•˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ์˜ค๋ฅ˜

OutOfMemoryError๋Š” ๋Ÿฐํƒ€์ž„์— ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๋Š” Throwable ์œ ํ˜• ์ธ Error์˜ ํ•˜์œ„ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค . Java 8์—๋Š” ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ธก๋ฉด์—์„œ ์ผ๋ถ€ ๊ฐœ์„  ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ž˜๋ชป ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ OutOfMemoryError ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OutOfMemoryError๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ ์ ˆํ•˜๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ , ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ์„ ํ”ผํ•˜๊ณ , ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ -Xmx ํ”Œ๋ž˜๊ทธ ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JVM์˜ ์ตœ๋Œ€ ํž™ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์˜ค๋ฅ˜

StackOverflowError ๋Š” ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ์Šคํƒ ํฌ๊ธฐ๊ฐ€ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์–‘์„ ์ดˆ๊ณผํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘์ฒฉ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์ž์‹ ์„ ๋„ˆ๋ฌด ๋งŽ์ด ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•˜์—ฌ ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JVM(Java Virtual Machine)์€ ์‹คํ–‰ ์Šคํƒ์— ๊ณ ์ •๋œ ์–‘์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ฉฐ, ์ด๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์Šคํƒ์ด ์˜ค๋ฒ„ํ”Œ๋กœ๋˜๋ฉด JVM์€ StackOverflowError ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค . StackOverflowError๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด Java ํ”„๋กœ๊ทธ๋žจ์ด ์žฌ๊ท€ ๋ฐ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ์„ ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. StackOverflowError ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด Java ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ -Xss ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ ค๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .

InvocationTargetException

InvocationTargetException์€ Java ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์—์„œ ๋ฐœ์ƒํ•˜๋Š” ํ™•์ธ๋œ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” java.lang.reflect.InvocationTargetException ํŒจํ‚ค์ง€์˜ ์ผ๋ถ€ ์ด๋ฉฐ ๋ฉ”์†Œ๋“œ ๋˜๋Š” ์ƒ์„ฑ์ž ํ˜ธ์ถœ ์ค‘์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Java ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์†Œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด java.lang.reflect.Method ๋˜๋Š” java.lang.reflect.Constructor ํด๋ž˜์Šค ์˜ ํ˜ธ์ถœ() ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค . ํ˜ธ์ถœ๋œ ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๊ฐ€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ, Invoke() ๋ฉ”์„œ๋“œ๋Š” ์ด๋ฅผ ํฌ์ฐฉํ•˜์—ฌ InvocationTargetException ์œผ๋กœ ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์˜ˆ์™ธ๋Š” ํ˜ธ์ถœ์ž() ํ˜ธ์ถœ์ž์—๊ฒŒ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค . InvocationTargetException์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์ด๋ฅผ ํฌ์ฐฉํ•˜๊ณ  getCause () ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทผ๋ณธ ์›์ธ ์˜ˆ์™ธ๋ฅผ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ๊ทธ์— ๋”ฐ๋ผ ๊ทผ๋ณธ ์›์ธ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทผ๋ณธ ์›์ธ์€ ํ™•์ธ๋œ ์˜ˆ์™ธ์ผ ์ˆ˜๋„ ์žˆ๊ณ  ๋Ÿฐํƒ€์ž„ ์˜ˆ์™ธ์ผ ์ˆ˜๋„ ์žˆ์œผ๋ฏ€๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Java์—์„œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

NullPointerException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: null ๊ฐ’์ด ์žˆ๋Š” ๊ฐœ์ฒด์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค .
String title= null;
System.out.println(title.length()); // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ NullPointerException
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• #1: ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ฐœ์ฒด๊ฐ€ null์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.
if(title!= null) {
   System.out.println(title.length());
} else {
   System.out.println("title is null");
}
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• #2: Optional์„ ์‚ฌ์šฉํ•˜์—ฌ NullPointerException์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค .
Optional<String> optionalTitle = Optional.ofNullable(getTitle());
if (optionalTitle.isPresent()) {
   String title= optionalTitle.get();
   System.out.println("Title: " + title);
} else {
   System.out.println("Title is not available.");
}

ArrayIndexOutOfBoundsException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ๋ฒ”์œ„ ๋ฐ–์— ์žˆ๋Š” ์ธ๋ฑ์Šค์— ์žˆ๋Š” ๋ฐฐ์—ด์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
int[] numbers = {4, 5, 6};
System.out.println(numbers[3]);   // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ ArrayIndexOutOfBoundsException
ํ•ด๊ฒฐ์ฑ…: ๋ฐฐ์—ด์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์ „์— ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•˜๊ณ  ์œ ํšจํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
int[] numbers = {4, 5, 6};
if (numbers.length > 3) {
   System.out.println(numbers[3]);
} else {
   System.out.println("ArrayIndexOutOfBoundsException: Please use valid indexes of the Array");
}

ClassCastException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ์‹ค์ œ ์œ ํ˜•๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ์œ ํ˜•์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์บ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
Object obj = "Java Exception";
Integer number = (Integer) obj; // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ ClassCastException
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ํ˜ธํ™˜๋˜๋Š” ์œ ํ˜•์œผ๋กœ๋งŒ ๊ฐœ์ฒด๋ฅผ โ€‹โ€‹์บ์ŠคํŒ…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Object obj = "Java Exception";
if(obj instanceof Integer) {
   Integer number = (Integer) obj;
   System.out.println(number);
} else {
   System.out.println("Object cannot caste to Integer");
}

IllegalArgumentException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ๋ฉ”์„œ๋“œ์— ์ž˜๋ชป๋œ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.
public void printNumber(int number) {
   if(number <= 0) {
      throw new IllegalArgumentException("You cannot pass a negative number or zero");
   }
   System.out.println(number);
}

printNumber(-1); // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ IllegalArgumentException
ํ•ด๊ฒฐ์ฑ…: ๋ฉ”์†Œ๋“œ์— ์œ ํšจํ•œ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. ์ด ๊ฒฝ์šฐ ์–‘์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์‹ญ์‹œ์˜ค.
printNumber(1); //  ะญั‚ะพ ัƒัะฟะตัˆะฝะพ ะฝะฐะฟะตั‡ะฐั‚ะฐะตั‚ 1.

IllegalStateException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ๊ฐœ์ฒด๊ฐ€ ์ž˜๋ชป๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
public class Bike {

   private Boolean isStarted;

   public void start() {
      if(isStarted) {
        throw new IllegalStateException("Bike is already started");
      }
      isStarted = true;
      System.out.println("Bike started");
   }
}

Bike bike= new Bike();
bike.start();
bike.start(); // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ IllegalStateException ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ bike is already started
ํ•ด๊ฒฐ์ฑ…: ๊ฐ์ฒด ์ƒํƒœ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์œ ์ง€ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
Bike bike= new Bike();
bike.start();

UnsupportedOperationException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ๊ฐœ์ฒด์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ž‘์—…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ธ๊ธฐ ์žˆ๋Š” ์˜ˆ ์ค‘ ํ•˜๋‚˜๋Š” ๋ถˆ๋ณ€ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•ด ์ œ๊ฑฐ() ์ž‘์—…์„ ์‚ฌ์šฉํ•  ๋•Œ UnsupportedOperationException ์˜ˆ์™ธ๊ฐ€ ํ‘œ์‹œ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค .
List<String> list = Arrays.asList("Java", "Angular", "Spring");
list.add("Python"); // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ UnsupportedOperationException
Arrays.asList() ๋ฉ”์„œ๋“œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ชฉ๋ก์„ ๋ฐ˜ํ™˜ ํ•˜๋ฏ€๋กœ ์š”์†Œ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๊ฐœ์ฒด์— ๋Œ€ํ•ด ์ง€์›๋˜๋Š” ์ž‘์—…๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
List<String> list = new ArrayList<>(Arrays.asList("Java", "Angular" "Spring"));
list.add("Python");
System.out.println(list);

ArithmeticException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค #1: ๋ถ„์ˆ˜ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ •์ˆ˜ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
int i = 10;
int j = 4;
int k = i/j; // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ ะธัะบะปัŽั‡ะตะฝะธะต ArithmeticException: ั†ะตะปะพั‡ะธัะปะตะฝะฝะพะต ะดะตะปะตะฝะธะต ะฑัƒะดะตั‚ ะดั€ะพะฑะฝั‹ะผ
์—ฌ๊ธฐ์„œ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋Š” ๋ถ„์ˆ˜๊ฐ’์ธ 2.5์ž…๋‹ˆ๋‹ค. ์ •์ˆ˜๋Š” ๋ถ„์ˆ˜ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ArithmeticException ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค . ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ์ด ์˜ˆ์™ธ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด double ๊ณผ ๊ฐ™์€ ๋ถ„์ˆ˜ ๊ฐ’์„ ์ง€์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
int i = 10;
int j = 4;
double k = (double) i/j;
์‹œ๋‚˜๋ฆฌ์˜ค #2: 0์œผ๋กœ ๋‚˜๋ˆ„๋ ค๊ณ  ํ•˜๋ฉด ์ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค.
int i = 4;
int j = 0;
int k = i/j; // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ ะธัะบะปัŽั‡ะตะฝะธะต ArithmeticException: ะฝะตะปัŒะทั ะดะตะปะธั‚ัŒ ะฝะฐ ะฝะพะปัŒ
ํ•ด๊ฒฐ์ฑ…: 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์˜ฌ๋ฐ”๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
int i = 4;
int j = 0;
if(j != 0) {
int k = i/j;
System.out.println(k);
} else {
System.out.println("ArithmeticException: Cannot divide by zero");
}

IndexOutOfBoundsException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ์ปฌ๋ ‰์…˜ ์™ธ๋ถ€์— ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
List<String> list = Arrays.asList("Apple", "Papaya", "Mango");
System.out.println(list.get(3)); // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ IndexOutOfBoundsException
ํ•ด๊ฒฐ์ฑ…: ์ปฌ๋ ‰์…˜์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์ „์— ์ปฌ๋ ‰์…˜์˜ ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜๊ณ  ์œ ํšจํ•œ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
List<String> list = Arrays.asList("Apple", "Papaya", "Mango");
if (list.size() > 3) {
   System.out.println(list.get(3));
} else {
   System.out.println("You are using the Index which is out of bounds");
}

IOException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ/์ถœ๋ ฅ ์ž‘์—…์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.
try {
   File inputFile = new FileReader("pqr.txt");
   BufferedReader reader = new BufferedReader(inputFile);
   String line = reader.readLine();
   System.out.println(line);
} catch (IOException e) {
   e.printStackTrace();
}
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: I/O ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฆฌ์†Œ์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ซํ˜”๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
File inputFile = new File("pqr.txt");

if (!inputFile.exists() || !inputFile.canRead()) {
 System.out.println("The input file is missing or not readable.");
 return;
}

try {
BufferedReader reader = new BufferedReader(inputFile);
 String line = reader.readLine();
 System.out.println(line);
  reader.close();
} catch (IOException e) {
 e.printStackTrace();
}
๋Œ€์•ˆ์œผ๋กœ Java 7์— ๋„์ž…๋œ try-with-resource ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฆฌ์†Œ์Šค๋ฅผ ์ž๋™์œผ๋กœ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. try ๋ฌธ ์—์„œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ , Java๋Š” ๋ธ”๋ก์ด ์ •์ƒ์ ์œผ๋กœ ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋ธ”๋ก ๋์—์„œ ์ž๋™์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ซ์Šต๋‹ˆ๋‹ค.
try (BufferedReader reader = new BufferedReader(new FileReader("pqr.txt"))) {
....
} catch {
....
}

FileNotFoundException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ์ง€์ •๋œ ์œ„์น˜์—์„œ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
try {
     BufferedReader reader = new BufferedReader(new FileReader("abc.txt"));
     String line = reader.readLine();
     System.out.println(line);
     reader.close();
} catch (FileNotFoundException | IOException e) {
     System.out.println("An error has occurred while reading the file: " + e.getMessage());
}
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ํŒŒ์ผ์ด ์กด์žฌํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ ˆํ•œ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
try {
    File file = new File("abc.txt");
    if(!file.exists()) {
    throw new FileNotFoundException("File not found at the specified location");
    }
    BufferedReader reader = new BufferedReader(new FileReader(file));
    String line = reader.readLine();
    System.out.println(line);
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}

NoSuchMethodException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๋ฉ”์†Œ๋“œ์— ์•ก์„ธ์Šคํ•˜๋ ค๋Š” ๊ฒฝ์šฐ.
public class TestClass {
   public void sayHello() {
      System.out.println("Hello");
   }
}

TestClass obj = new TestClass();
Method method = obj.getClass().getMethod("printHello"); // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ NoSuchMethodException
ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€, ๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ์„œ๋ช…์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.
public class TestClass {
   public void sayHello() {
      System.out.println("Hello");
   }
}

TestClass  obj = new TestClass();
try {
    Method method = obj.getClass().getMethod("sayHello");
} catch (NoSuchMethodException e) {
    e.printStackTrace();
}

ConcurrentModificationException์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์‹œ๋‚˜๋ฆฌ์˜ค: ์ปฌ๋ ‰์…˜์ด ๋ฐ˜๋ณต๋˜๋Š” ๋™์•ˆ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
for (String str : list) {
  list.remove(str);  // ะญั‚ะพ ะฒั‹ะทะพะฒะตั‚ ConcurrentModificationException
}
ํ•ด๊ฒฐ์ฑ…: ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์„ ๋ฐ˜๋ณตํ•˜๊ณ  ๋ฐ˜๋ณต์ž ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปฌ๋ ‰์…˜์„ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.
List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String str = iterator.next();
    iterator.remove();
}
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION