๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“š์ฝ์€ ์ฑ… ์ •๋ฆฌ/์ž๋ฐ” ๋งˆ์Šคํ„ฐ๋ถ

[์ž๋ฐ” ๋งˆ์Šคํ„ฐ๋ถ] 6์žฅ ์˜ˆ์™ธ ๊ณต๋žตํ•˜๊ธฐ

6.1 ์˜ˆ์™ธ์˜ ๊ธฐ๋ณธ

6.1.1 ์˜ˆ์™ธ์˜ ์„ธ ๊ฐ€์ง€ ์ข…๋ฅ˜

1) ๊ฒ€์‚ฌ ์˜ˆ์™ธ (Exception)

์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์‹œ์— ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋น„์ •์ƒ ์ƒํƒœ๋ฅผ ํ†ต์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.

์˜ˆ๋ฅผ ๋“ค์–ด ํŒŒ์ž… ์ž…์ถœ๋ ฅ์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ IOException์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋ฅผ ์˜ˆ์ƒํ•˜๊ณ  ๋ฏธ๋ฆฌ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ง€ catchํ•˜๊ฑฐ๋‚˜ throwํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํ•˜์ง€๋งŒ ๋ชจ๋“  ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ์ •์˜ํ•ด์•ผํ•˜๋Š” ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋งŽ์•„์ง€๊ณ  ๋ณต์žกํ•ด์ง€๋ฏ€๋กœ '์‹คํ–‰ ์‹œ ์˜ˆ์™ธ'๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค.

 

2) ์‹คํ–‰ ์‹œ ์˜ˆ์™ธ (RuntimeException)

์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ ์‹œ์— ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๋ฅผ ํ†ต์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ.

'๊ฒ€์‚ฌ ์˜ˆ์™ธ'์™€๋Š” ๋‹ฌ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ ํฌ์ฐฉํ•˜์ง€ ์•Š์•„๋„ ๋”ฐ๋กœ '์ปดํŒŒ์ผ ์˜ค๋ฅ˜'๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด '๋ฌธ์ž'๋ฅผ '์ˆซ์ž'๋กœ ๋ณ€ํ™˜ํ•˜๋Š” Integer.parseInt์˜ ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๋ฌธ์ž๊ฐ€ ๋“ค์–ด์˜จ๋‹คํ•ด๋„ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. 

์ด๋Š” `์‹คํ–‰ ์‹œ ์˜ค๋ฅ˜`๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์‹คํ–‰ ์ค‘์— ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ์— ํ•ด๋‹นํ•œ๋‹ค.

ex) java.lang.NumberFormatException, java.lang.ArithmeticException

 

3) ์˜ค๋ฅ˜ (Error)

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

 

6.1.2 ์˜ˆ์™ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์„ธ ๊ฐ€์ง€ ํด๋ž˜์Šค

1) java.lang.Exception ํด๋ž˜์Šค

๊ฒ€์‚ฌ ์˜ˆ์™ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค. ์ด ํด๋ž˜์Šค๋ฅผ ๊ณ„์Šนํ•œ ์˜ˆ์™ธ(Exception์„ ๊ณ„์Šนํ•œ RuntimeException๋งŒ ์ œ์™ธ)๋Š” ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ํฌ์ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜(์„ ์–ธ์˜ ๋‚ด์šฉ)์— throws ์ ˆ์„ ๊ธฐ์ˆ ํ•ด์•ผ๋งŒ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด fileํ˜ธ์ถœ ์‹œ IOException์„ ๋ช…์‹œํ•˜๊ฑฐ๋‚˜ sql์‚ฌ์šฉ ์‹œ SQLException์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ์ด ์•ˆ๋˜๋ฏ€๋กœ ์ข€ ๋” '๊ฒฌ๊ณ ํ•œ ํ”„๋กœ๊ทธ๋žจ'์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

 

2) java.lang.RuntimeException ํด๋ž˜์Šค

์‹คํ–‰ ์‹œ ์˜ˆ์™ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค ํ”„๋กœ๊ทธ๋žจ ์•ˆ์—์„œ ๋ฐ˜๋“œ์‹œ ํฌ์ฐฉํ•  ํ•„์š”๋„ throws๋ฅผ ๊ธฐ์ˆ ํ•  ํ•„์š”๋„ ์—†๋‹ค.

๋ฐœ์ƒํ•œ ์˜ˆ์™ธ๋Š” ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ์›์— ์ „ํŒŒ๋œ๋‹ค. (์ƒ์œ„๋กœ.. ์ƒ์œ„๋กœ..)

 

๊ทธ๋ ‡๋‹ค๋ฉด ์–ด๋””์—์„œ๋„ "์‹คํ–‰ ์‹œ ์˜ˆ์™ธ"๋ฅผ ํฌ์ฐฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๋‹ต์€ 'ํ•ด๋‹น ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒํ•ด๋ฒ„๋ฆฐ๋‹ค' ์ด๋‹ค. Java VM์— ์˜ˆ์™ธ๊ฐ€ ๋„๋‹ฌํ•˜๋ฉด ํ•ด๋‹น ์Šค๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒ์‹œํ‚จ๋‹ค.

ํ•ด๋‹น ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ผ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

 

3) java.lang.Error ํด๋ž˜์Šค

'์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ํฌ์ฐฉํ•ด์„œ๋Š” ์•ˆ ๋˜๋Š” ์ค‘๋Œ€ํ•œ ๋ฌธ์ œ'๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค์ด๋‹ค. 

Error๋Š” RuntimeException์ฒ˜๋Ÿผ ๋”ฐ๋กœ catch๋‚˜ throws ๋ฅผ ๊ธฐ์ˆ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ RuntimeException์ฒ˜๋Ÿผ ํฌ์ฐฉํ•ด์•ผ ๋  ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค..

 

Error๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ทธ์ € ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹ฌ๊ฐํ•œ ๋น„์ •์ƒ ์ƒํƒœ์ด๋ฏ€๋กœ ์‹ ์†ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒ์‹œ์ผœ์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค.

ex) java.lang.OutOfMemeroyError (๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ) -> ์‹ ์† ์ข…๋ฃŒ ํ•„์š”.

 

6.1.3 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์„ธ ๊ฐ€์ง€ ๊ตฌ๋ฌธ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

1) try~ catch~ finallly

try์—๋Š” ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋ฅผ catch๋Š” ์˜ˆ์™ธ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ finally๋Š” ์˜ˆ์™ธ์™€ ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ ์ฒ˜๋ฆฌํ•ด์•ผ๋งŒ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ช…์‹œํ•œ๋‹ค.

ํ•ญ์ƒ ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ๊ฒƒ์—๋Š” '์ž์›์˜ ๋ฐ˜๋‚ฉ'์ด ์žˆ๋‹ค.

 

2) try~with~resources

1)์˜ ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด finally ๋ถ€๋ถ„์—์„œ๋„ try catch ๋ถ€๋ถ„์ด ์ƒ๊ฒจ ์ค‘๋ณต์ด ์ƒ๊ธฐ๊ณ  ๊ท€์ฐฎ๋‹ค. ์ž๋ฐ” 7๋ถ€ํ„ฐ๋Š” try~with~resources ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜๊ณ  ์žˆ๋‹ค. 

try(...์ž์›...) ๊ด„ํ˜ธ์•ˆ์— ์žˆ๋Š” ์ž์›๋“ค์„ try~catch๋ฌธ์ด ๋๋‚œ ํ›„ ์ž๋™์œผ๋กœ closeํ•ด์ค€๋‹ค. ๋งŒ์•ฝ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” close์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด ๊ทธ ์™ธ๋ถ€๋กœ ์˜ˆ์™ธ๊ฐ€ throw๋œ๋‹ค.

 

try (InputStream is = new FileInputStream(fromFile);
		OutputStream os = new FileOutputStream(toFile)) {
	is.read(contents);
    os.write(contents);
} catch (IOException ex) {
	// ์˜ˆ์™ธ ํฌ์ฐฉ ์‹œ ์ฒ˜๋ฆฌ
}

 

3) ๋‹ค์ค‘ ์บ์น˜

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

	try{
            Class<?> clazz = Class.forName("Main");
            clazz.newInstance();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }

์œ„ ์ฒ˜๋Ÿผ ํ•˜๋ฉด ์˜ˆ์™ธ๋งˆ๋‹ค catch๋ฌธ๊ณผ ์ฒ˜๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ค˜์•ผํ•˜๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฒˆ์žกํ•ด์ง„๋‹ค.

 

์ž๋ฐ” 7์—์„œ ๋„์ž…๋œ "๋‹ค์ค‘ ์บ์น˜"๋ฅผ ์ด์šฉํ•˜๋ฉด ์ข€ ๋” ํŽธํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

        try{
            Class<?> clazz = Class.forName("Main");
            clazz.newInstance();
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ท€์ฐฎ๋‹ค๊ณ  Exception์œผ๋กœ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•˜๊ณ  ์ƒ์œ„๋กœ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ๊ณตํฌ์˜ throws Exception ๊ฐ์—ผ ํ˜„์ƒ์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. 

 

6.2 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์—์„œ ํ˜ผ๋ž€์— ๋น ์ง€์ง€ ์•Š๊ธฐ ์œ„ํ•œ ํฌ์ธํŠธ

6.2.1 ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๊ธฐ

์ž๋ฐ”์—๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋น„์ •์ƒ์ ์ธ ์ƒํ™ฉ ์‹œ ์˜ˆ์™ธ๋ฅผ ๋‚ ๋ ค์•ผํ•˜๊ณ  ์˜ˆ์ƒ์ฒ˜๋Ÿผ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋‹ค๋ฉด ๋ฐ˜ํ™˜๊ฐ’์„ ์ œ๊ณตํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ˜ธ์ถœํ•œ ์ชฝ์—์„œ ๋ถˆํ•„์š”ํ•œ if๋ฌธ์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

6.2.2 ์˜ˆ์™ธ๋ฅผ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ธฐ

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋Š” ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์™ธ๋ฅผ catch๋งŒ ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์„ ๋• ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ด ๋•Œ๋Š” ์ ์–ด๋„ ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€๋Š” ์•Œ๋ ค์ค˜์•ผ๋งŒ ํ•œ๋‹ค.

1) ๋กœ๊ทธ ์ถœ๋ ฅ์„ ์žŠ์ง€ ์•Š๊ธฐ

catch (NumberFormatException ex) {

    log.warn("์ˆซ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. " + ex);

}

 

์œ„์™€ ๊ฐ™์ด ์–ด๋Š ๋ถ€๋ถ„์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ํ‘œํ˜„ํ•˜์ž.

 

2) ์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์†ํ• ์ง€ ํŒ๋‹จํ•˜๊ธฐ

์ฒ˜๋ฆฌ๋ฅผ ๊ทธ๋งŒ๋‘๊ณ  ์ƒ์œ„ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด return์ด๋‚˜ throw๋ฅผ ํ•˜๊ณ  ์ฒ˜๋ฆฌ๋ฅผ ๊ณ„์†ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ดํ›„์— ์ˆ˜ํ–‰์— ํ•„์š”ํ•œ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด default๊ฐ’์„ ๋„ฃ์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

 

6.2.3 ๊ณตํฌ์˜ throws Exception ๊ฐ์—ผ

๋ณต์ˆ˜์˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์˜ˆ์™ธ์˜ ์„ ์–ธ์ด๋‚˜ ํฌ์ฐฉ์ด ๊ท€์ฐฎ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋„ˆ์ฒ˜์— throws Exception์ด๋ผ๊ณ  ๊ธฐ์ˆ ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ๋‹ค..

์ด๋Š” ๋‚˜์ค‘์— ๋น„๊ทน์„ ๋‚ณ๋Š”๋‹ค.

 

1) ํ˜ธ์ถœํ•˜๋Š” ๊ณณ์—์„œ Exception์„ ํฌ์ฐฉํ•ด์•ผํ•œ๋‹ค.

Exception์„ ๋ฉ”์„œ๋“œ์—์„œ ๋˜์ง€๋ฉด ๊ทธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ˜ธ์ถœ์›์€ ์–ด๋–ค ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š” ์ง€ ์•Œ์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ์—์„œ Exception์„ ํฌ์ฐฉํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.. ์–ด๋–ค ์˜ˆ์™ธ์ธ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์— ์–ด๋ ค์›€์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.

(ํ˜ธ์ถœ์›์—์„œ ์˜ˆ์™ธ๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ)

 

2) ๋„์ค‘์— IOException ๋“ฑ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ Exception์ด ๋˜๋ฒ„๋ฆฐ๋‹ค...

ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ๋ฉ”์„œ๋“œ์—์„œ IOException์ด๋‚˜ ClassNotFound๋“ฑ ๋‹ค์–‘ํ•œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด๋„ ์ด๋ฅผ ํŠน์ •ํ•˜์ง€ ๋ชปํ•˜๊ณ  'ํ˜ธ์ถœ์›'์—์„œ๋Š” Exception์ด๋ผ๋Š” ์ •๋ณด๋งŒ ๊ฐ€์ง€๊ณ  ์ด๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.. (ํ˜ธ์ถœ์›์—์„œ ์˜ˆ์™ธ๋ฅผ ํŠน์ •ํ•˜์ง€ ๋ชปํ•จ)

 

3) RuntimeException์ด ๋ฐœ์ƒํ•ด๋„ Exception์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•œ๋‹ค...

Exception๊ณผ RuntimeException์€ ๊ฒ€์‚ฌ์˜ˆ์™ธ์™€ ์‹คํ–‰ ์ค‘ ์˜ˆ์™ธ์ด๋ฏ€๋กœ ๋ถ„๋ช…ํžˆ ๋‹ค๋ฅด๋‹ค. ํ•˜์ง€๋งŒ RuntimeException ๋ฐœ์ƒ ์‹œ์—๋„ Exception์œผ๋กœ ๋˜์ ธ๋ฒ„๋ฆฌ๋ฉด Exception ์ฒ˜๋ฆฌ๋กœ ์ธ์‹ํ•ด ์ ์ ˆํ•œ ์กฐ์น˜๋ฅผ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค..

 

6.2.4 ์–ด๋Š ๊ณ„์ธต์—์„œ ์˜ˆ์™ธ๋ฅผ ํฌ์ฐฉํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

* ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์žฅ์†Œ

* ์ฒ˜๋ฆฌ์˜ ํ๋ฆ„์„ ํŒ๋‹จํ•˜๋Š” ์žฅ์†Œ

 

๋ณดํ†ต ๋ง๋‹จ์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ๋˜์ง€๊ณ  ๊ทธ ์˜ˆ์™ธ๋ฅผ ๋ฐ›์•„ ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

6.2.5 ๋…์ž์ ์ธ ์˜ˆ์™ธ ์ž‘์„ฑํ•˜๊ธฐ

๋ณ„๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด ์ž๋ฐ” ํ‘œ์ค€ API์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ž.

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

 

Exception์ด๋‚˜ RuntimeException์„ ์ ์ ˆํžˆ ์ƒ์†๋ฐ›์•„ ํ•„์š”ํ•œ ํ•„๋“œ(id or message ๋“ฑ)์„ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ž.

 

6.2.6 ์˜ˆ์™ธ์˜ ํŠธ๋ Œ๋“œ 

1. ๊ฒ€์‚ฌ์˜ˆ์™ธ๋ณด๋‹ค ์‹คํ–‰ ์‹œ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉ

-> ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ž์ฒด๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ผ์ผ์ด ๊ฐœ๋ณ„ ๋กœ์ง์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋จ.

 

2. ๋žŒ๋‹ค์‹ ์•ˆ์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ ์ทจ๊ธ‰

๋žŒ๋‹ค์•ˆ์—์„œ throw๋ฅผ ํ•˜๋ฉด ๋žŒ๋‹ค ๋ฐ–์—์„œ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

3. Optional ํด๋ž˜์Šค ๋„์ž…์— ์˜ํ•œ ์žฅ์ 

์ž๋ฐ”์˜ ๊ณ ์งˆ์ ์ธ ๋ฌธ์ œ์ธ NullPointerException์„ ์ข€ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด Optional ํด๋ž˜์Šค๊ฐ€ ๋„์ž…๋˜์—ˆ๋‹ค.

Mapํด๋ž˜์Šค์˜ get์‚ฌ์šฉ ์‹œ ํ‚ค๊ฐ€ ์—†๋‹ค๋ฉด null์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๊ณ  ์ด๋ฅผ ์ฒดํฌํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•˜๋ฉด NullPointerException์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

๋”ฐ๋ผ์„œ null์ฒดํฌ๋Š” ํ•„์ˆ˜์ ์ด์—ˆ๋‹ค.

 

Optional์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ’์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.