Programing_Java

Section#14 _ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ณธ๋ฌธ

๐Ÿ“œ MENTOR JAVA

Section#14 _ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

Joyfullyever 2025. 1. 21. 15:06

#1 ์—๋Ÿฌ(Error)์™€ ์˜ˆ์™ธ(Exception)

: Java๋Š” ์—๋Ÿฌ or ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ, ํด๋ž˜์Šค๋กœ ๊ด€๋ฆฌ → ์ปดํŒŒ์ผ or ์‹คํ–‰ ์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ๋ฌธ์ œ์— ๋”ฐ๋ฅธ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ

 

#1-1. ์—๋Ÿฌ(error)

: ์—๋Ÿฌ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์˜ˆ์ธกํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๋Š” ์˜์—ญ

: ์‹œ์Šคํ…œ์— ๋น„์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์ƒ๊ฒผ์„ ๊ฒฝ์šฐ → ์™ธ๋ถ€ ์š”์ธ, ํ”„๋กœ๊ทธ๋žจ ๊ตฌ๋™ ์ค‘ ์น˜๋ช…์  ์˜ค๋ฅ˜

: Ex) ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ, ์ž…์ถœ๋ ฅ ์—๋Ÿฌ, ...

#1-2. ์˜ˆ์™ธ(exception)

: ํ”„๋กœ๊ทธ๋žจ ๊ตฌ๋™ ์ค‘์— ๋‚˜ํƒ€๋‚˜๋Š” ์˜ค๋ฅ˜๋“ค → ๋ฌธ๋ฒ•์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์—†์–ด๋ณด์—ฌ๋„ ์‹ค์ œ ์šด์˜ ์ค‘์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋“ค

 

#2 ์˜ˆ์™ธ ํด๋ž˜์Šค

: ์‹œ์Šคํ…œ์€ ๋ฌด์Šจ ์ด์œ ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋กœ ์ถœ๋ ฅํ•ด์คŒ

 

#2-1. NullPointerException

: ๊ฐ€์žฅ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฉฐ, ์šฐ๋ฆฌ๊ฐ€ ๋งŽ์ด ๋ณผ ์˜ˆ์™ธ

: ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒ → ๊ฐ์ฒด๋Š” ์ •์˜๋˜์—ˆ๋Š”๋ฐ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ

// NullPointerException ์˜ˆ์ œ
//๋ฐฐ์—ด์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์„ ์–ธํ•˜์ง€ ์•Š์Œ
String[] Array = null;
// ์—†๋Š” ๋ฐฐ์—ด์„ ์ถœ๋ ฅํ•˜๋ ค๊ณ  ํ•จ
System.out.println("Array[0] = " + Array[0]);

// ๊ฒฐ๊ณผ
NullPointerException ์˜ˆ์™ธ ๋ฐœ์ƒ

#2-2. NumberFormatException

: ์ž˜๋ชป๋œ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ํ˜• ๋ณ€ํ™˜ํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒ

String str01 = "11";
String str02 = "11.11";
// ์ •์ˆ˜ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜
int num01 = Integer.parseInt(str01);

// ์‹ค์ˆ˜ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์„ ์ •์ˆ˜๋กœ ๋ณ€ํ™˜
int num02 = Integer.parseInt(str02);

// ๊ฒฐ๊ณผ
num01์€ ์ •์ƒ ์ถœ๋ ฅ
num02๋Š” NumberFormatException ์˜ˆ์™ธ ๋ฐœ์ƒ

#2-3. ArrayIndexOutOfBoundsException

: ์ธ๋ฑ์Šค ๋ฐฐ์—ด์„ ์ดˆ๊ณผํ•ด์„œ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒ

// ๊ธธ์ด๊ฐ€ 5์ธ ๋ฐฐ์—ด ์ƒ์„ฑ
int[] arr = new int[5];
int[] arr = {1,2,3,4,5};
// 5๋ฒˆ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ คํ•จ
System.out.println(arr[6]);

// ๊ฒฐ๊ณผ
ArrayIndexOutOfBoundsException ์˜ˆ์™ธ ๋ฐœ์ƒ

#3 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฌธ๋ฒ•

#3-1. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ณผ์ •

1) ์ฝ”๋“œ ์ง„ํ–‰ ์ค‘ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด JVM์— ์•Œ๋ฆผ

2) JVM์€ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋ฅผ ๋ถ„์„, ์•Œ๋งž์€ ์˜ˆ์™ธ ํด๋ž˜์Šค ์ƒ์„ฑ

3) ์ƒ์„ฑ๋œ ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ๋ฐœ์ƒํ•œ ์ง€์ ์œผ๋กœ ๋ณด๋ƒ„

4) ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ์ง€์ ์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ ๋น„์ •์ƒ ์ข…๋ฃŒ

 

#3-1. try-catch๋ฌธ

: catch ๋ฉ”์„œ๋“œ๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌ

try{
// ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ
}
catch(์˜ˆ์™ธํด๋ž˜์Šค๋ช… e){
// ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ
}
finally{
// ๋ฐ˜๋“œ์‹œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ฝ”๋“œ
}

: ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ Exception ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ชจ๋“  ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

→ ํ•˜์ง€๋งŒ ์ตœ์ƒ๋‹จ์— ์“ด๋‹ค๋ฉด ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ํ™•์ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ํ›„์˜ ์˜ˆ์™ธ๋Š” ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์Œ

 

#3-3. ๋‹ค์ค‘ catch ์‚ฌ์šฉ

: ๋‹ค์ค‘ catch๋ฌธ์€ ์˜ˆ์™ธ๋ณ„๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅด๊ฒŒํ•˜์—ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ: ์˜ˆ์™ธ๋ฅผ ๋‹ค์ค‘ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋ฉด ์ฝ”๋“œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋‹ค์–‘ํ•œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ → ๋ณด๋‹ค ์•ˆ์ •์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ

 

#3-4. finally

: ์˜ˆ์™ธ ๋ฐœ์ƒ ์œ ๋ฌด์™€ ์ƒ๊ด€์—†์ด ์‹คํ–‰๋˜๋Š” ๊ตฌ๋ฌธ, ์ƒ๋žต ๊ฐ€๋Šฅ: ์˜ˆ์™ธ์™€ ์ƒ๊ด€์—†์ด ๋ฐ˜๋“œ์‹œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ตฌ๋ฌธ๋“ค์„ ์ž‘์„ฑ → ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ์ •์ƒ ์ข…๋ฃŒ๋˜์–ด์•ผ ํ•  ๊ตฌ๋ฌธ๋“ค์—์„œ ์‚ฌ์šฉ

 

#4 ์˜ˆ์™ธ ๋˜์ง€๊ธฐ

: ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•

: ์˜ˆ์™ธ ๋˜์ง€๊ธฐ๋ฅผ ํ•˜๋Š” ์ด์œ  → ๋ฉ”์„œ๋“œ์—์„œ ๊ฐ๊ฐ ์ฒ˜๋ฆฌํ•  ๊ฒฝ์šฐ : ๋ฉ”์„œ๋“œ ์ž์ฒด์˜ ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ฑฐ๋‚˜, ์œ ์ง€ ๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ํšจ์œจ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์Œ

→ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ชฝ์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ์ˆ˜์›”ํ•ด์งˆ ์ˆ˜ ์žˆ์Œ

 

#4-1 throws ํ‚ค์›Œ๋“œ

: ๋ฉ”์„œ๋“œ ๋’ค์— throws ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋˜์ง€๊ธฐ ํ•  ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ๋ถ™์ž„: ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋˜์งˆ ์‹œ ์ฝค๋งˆ(,)๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‚˜์—ด

#4-1-1. ์˜ˆ์™ธ ํด๋ž˜์Šค ์—ฌ๋Ÿฌ๊ฐœ ๋˜์ง€๊ธฐ

void ๋ฉ”์„œ๋“œ๋ช… throws NullPointerException, ClassNotFoundException, ...{}

#4-2 ์ž„์˜์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

: ํ”„๋กœ๊ทธ๋žจ์˜ ๊ทœ์น™์— ์œ„๋ฐฐ๋˜์–ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์ž„์˜๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ

: ๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋กœ ์ธํ•ด ๋ฐœ์ƒ → ์œ„์น˜ : try-catch๋ฌธ์˜ ๋‚ด๋ถ€ or ์˜ˆ์™ธ ๋˜์ง€๊ธฐ๊ฐ€ ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ ์•ˆ

 

#5 ์‚ฌ์šฉ์ž ์ •์˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

: ๋ชฉ์ ์— ๋”ฐ๋ผ ๊ณตํ†ต๊ธฐ๋Šฅ์„ ์ง€๋‹ˆ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋„ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์˜ˆ์™ธ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ฒ˜๋ฆฌ

: ์‚ฌ์šฉ์ž๊ฐ€ ๋งŒ๋“  ํด๋ž˜์Šค์— Exception ๋˜๋Š” RuntimeException์„ ์ƒ์†ํ•˜๋ฉด ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

โ–บ ์ตœ์ƒ์œ„ ๊ฐ์ฒด Exception ์„ ์ƒ์†ํ•  ๊ฒฝ์šฐ : ์ฒดํฌ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ

โ–บ RuntimeException ์„ ์ƒ์†ํ•  ๊ฒฝ์šฐ : ๋น„์ฒดํฌ ์˜ˆ์™ธ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ

: ์‚ฌ์šฉ๋ฒ•์€ ๊ธฐ์กด ์˜ˆ์™ธ ๊ฐ์ฒด๋“ค๊ณผ ๋™์ผ

class InputErrorException extends Exception{}