Notice
Recent Posts
Recent Comments
ยซ   2024/12   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
In Total
๊ด€๋ฆฌ ๋ฉ”๋‰ด

A Joyful AI Research Journey๐ŸŒณ๐Ÿ˜Š

[40] 230223 Java Ch. 10 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: 1. ์˜ˆ์™ธ ํด๋ž˜์Šค, 2. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 40์ผ] ๋ณธ๋ฌธ

๐ŸŒณBootcamp Revision 2023โœจ/Spring Framework, Java

[40] 230223 Java Ch. 10 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: 1. ์˜ˆ์™ธ ํด๋ž˜์Šค, 2. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ [K-๋””์ง€ํ„ธ ํŠธ๋ ˆ์ด๋‹ 40์ผ]

yjyuwisely 2023. 2. 23. 12:48

230223 Thu 40th class

Ch. 10 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ 
์ง„๋„: p. 453 ~ (๊ต์žฌ: ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ์ž๋ฐ”, ์ €์ž: ์‹ ์šฉ๊ถŒ)
ํ•œ๋น›๋ฏธ๋””์–ด_ํ˜ผ๊ณต์ž_์šฉ์–ด์ง‘.pdf
์šฉ์–ด ์ฐธ๊ณ 

 

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ์ž๋ฐ” | ์‹ ์šฉ๊ถŒ - ๊ต๋ณด๋ฌธ๊ณ 

ํ˜ผ์ž ๊ณต๋ถ€ํ•˜๋Š” ์ž๋ฐ” | ํ˜ผ์ž ํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค! 1:1 ๊ณผ์™ธํ•˜๋“ฏ ๋ฐฐ์šฐ๋Š” ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž์Šต์„œ (JAVA 8 &11 ์ง€์›) ์ด ์ฑ…์€ ๋…ํ•™์œผ๋กœ ์ž๋ฐ”๋ฅผ ๋ฐฐ์šฐ๋Š” ์ž…๋ฌธ์ž๊ฐ€ ‘๊ผญ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ์ œ๋Œ€๋กœ’ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋„

product.kyobobook.co.kr

์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ ์ค‘ ๊ธฐ์–ตํ•  ๊ฒƒ์„ ์ •๋ฆฌํ–ˆ๋‹ค. 


Ch. 10 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

์ฑ…์˜ ๋ชฉ์ฐจ
10-1 ์˜ˆ์™ธ ํด๋ž˜์Šค
10-2 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ


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

์ž๋ฐ”์—์„œ๋Š” ์ปดํ“จํ„ฐ ํ•˜๋“œ์›จ์–ด์˜ ์˜ค๋™์ž‘ ๋˜๋Š” ๊ณ ์žฅ์œผ๋กœ ์ธํ•ด ์‘์šฉํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ์—๋Ÿฌ(error)๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—๋Ÿฌ ์ด์™ธ์— ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋Š” ์˜ˆ์™ธ(exception)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

์˜ˆ์™ธ exception [10์žฅ 444์ชฝ] ์‚ฌ์šฉ์ž์˜ ์ž˜๋ชป๋œ ์กฐ์ž‘ ๋˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ž˜๋ชป๋œ ์ฝ”๋”ฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์˜ค๋ฅ˜

์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ ๊ณง๋ฐ”๋กœ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ์ ์—์„œ๋Š” ์—๋Ÿฌ์™€ ๋น„์Šทํ•˜๋‹ค. 

๊ทธ๋Ÿฌ๋‚˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์ •์ƒ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค. 

์˜ˆ์™ธ ์ฒ˜๋ฆฌ exception handling [10์žฅ 444์ชฝ] ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์ฒ˜๋ฆฌ๋˜๋Š” ๋™์•ˆ ํŠน์ •ํ•œ ๋ฌธ์ œ๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ ์ฒ˜๋ฆฌ๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ. ์ž๋ฐ”์—์„œ๋Š” ์˜ˆ์™ธ(exception)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์„ ๋งํ•˜๊ธฐ๋„ ํ•œ๋‹ค.


1) ์˜ˆ์™ธ์™€ ์˜ˆ์™ธ ํด๋ž˜์Šค 

์˜ˆ์™ธ์—๋Š” ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. 

• ์ผ๋ฐ˜ ์˜ˆ์™ธ: ์ปดํŒŒ์ผ๋Ÿฌ ์ฒดํฌ ์˜ˆ์™ธ๋ผ๊ณ ๋„ ํ•œ๋‹ค. ๋งŒ์•ฝ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
์ผ๋ฐ˜ ์˜ˆ์™ธ๋Š” Exception์„ ์ƒ์†๋ฐ›์ง€๋งŒ Runtime Exception์€ ์ƒ์†๋ฐ›์ง€ ์•Š๋Š”๋‹ค.
(๋นจ๊ฐ„์ƒ‰ ๋ฐ‘์ค„, ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.)


• ์‹คํ–‰ ์˜ˆ์™ธ: ์ปดํŒŒ์ผ๋Ÿฌ ๋„Œ ์ฒดํฌ ์˜ˆ์™ธ๋ผ๊ณ  ํ•œ๋‹ค. ์‹คํ–‰ ์‹œ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์ด ๊ฐ‘์ž๊ธฐ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.
์‹คํ–‰ ์˜ˆ์™ธ๋Š” RuntimeException์„ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋“ค์ด๋‹ค.
(์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋‚˜์˜ด) 

(์ปดํŒŒ์ผ compile [1์žฅ 2์ชฝ] ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ ๊ธฐ๊ณ„์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •)

์ž๋ฐ”์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ํด๋ž˜์Šค๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. JVM์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์˜ˆ์™ธ ํด๋ž˜์Šค๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ์—์„œ ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. 
๋ชจ๋“  ์˜ˆ์™ธ ํด๋ž˜์Šค๋Š” java.lang.Exception ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. 

์ฐธ๊ณ : https://www3.ntu.edu.sg/home/ehchua/programming/java/j5a_exceptionassert.html


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

2.1 NullPointerException ์‹คํ–‰ ์˜ˆ์™ธ

๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ ์—†๋Š” ์ƒํƒœ, ์ฆ‰ null ๊ฐ’์„ ๊ฐ–๋Š” ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด ์ ‘๊ทผ ์—ฐ์‚ฐ์ž์ธ ๋„ํŠธ(.)๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. 

int[] score = new int[3]
for (int i; i <= 3; i++){
...
}

์˜ˆ์ œ)

public class NullPointerException {
	public static void main(String[] args) {
		String data = null;
		System.out.println(data.toString());
	}
}

๊ฒฐ๊ณผ)

Exception in thread "main" java.lang.NullPointerException
	at ch10.NullPointerException.main(NullPointerException.java:6)

2.1 ArrayIndexOutOfBoundsException ์‹คํ–‰ ์˜ˆ์™ธ

๋ฐฐ์—ด์—์„œ ์ธ๋ฑ์Šค ๋ฒ”์œ„๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•œ๋‹ค. 

์˜ˆ์ œ 1)

public class ArrayIndexOutOfBoundsExceptionExample {
	public static void main(String[] args) {
		String data1 = args[0];
		String data2 = args[1];
		
		System.out.println("args[0]:" + data1);
		System.out.println("args[0]:" + data2);
	}
}

๊ฒฐ๊ณผ 1.1) 2๊ฐœ์˜ ์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์„ ์ฃผ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at ch10.ArrayIndexOutOfBoundsExceptionExample.main(ArrayIndexOutOfBoundsExceptionExample.java:5)

๊ฒฐ๊ณผ 1.2) Run - Run Configuration - Arguments ์ž…๋ ฅ๋ž€์— 2๊ฐœ์˜ ๋งค๊ฐœ๊ฐ’์„ ์ž…๋ ฅํ•œ๋‹ค. 

args[0]:10
args[0]:20

์˜ˆ์ œ 2)

public class ArrayIndexOutOfBoundsExceptionExample {
	public static void main(String[] args) {
		if(args.length == 2) {
		String data1 = args[0];
		String data2 = args[1];
		
		System.out.println("args[0]:" + data1);
		System.out.println("args[0]:" + data2);
	} else {
		System.out.println("๋‘ ๊ฐœ์˜ ์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.");
	}
}
}

๊ฒฐ๊ณผ) 

๋‘ ๊ฐœ์˜ ์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

2.3 NumberFormatException ์‹คํ–‰ ์˜ˆ์™ธ

๋ฌธ์ž์—ด๋กœ ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆซ์ž๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค. 

์˜ˆ์ œ)

public class NumberFormatExceptionExample {
	public static void main(String[] args) {
	String data1 = "100";
	String data2 = "a100";
	
	int value1 = Integer.parseInt(data1);
	int value2 = Integer.parseInt(data2); //NumberFormatException ๋ฐœ์ƒ
	
	int result = value1 + value2;
	System.out.println(data1 + "+" + data2 + "=" + result); 
	}
}

๊ฒฐ๊ณผ) 

Exception in thread "main" java.lang.NumberFormatException: For input string: "a100"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at ch10.NumberFormatExceptionExample.main(NumberFormatExceptionExample.java:9)

2.4 ClassCastException ์‹คํ–‰ ์˜ˆ์™ธ p. 450

ํƒ€์ž… ๋ณ€ํ™˜(Casting)์€ ์ƒ์œ„ ํด๋ž˜์Šค - ํ•˜์œ„ ํด๋ž˜์Šค, ๊ตฌํ˜„ ํด๋ž˜์Šค - ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ„์— ๋ฐœ์ƒํ•œ๋‹ค.
์ด๋Ÿฌํ•œ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ClassCastException์ด ๋ฐœ์ƒํ•œ๋‹ค. 

2023.02.01 - [1. Revision 2023/Java] - [24] 230201 Ch. 3 ์ž๋ฐ” ์—ฐ์‚ฐ์ž: 1. ์—ฐ์‚ฐ์ž์™€ ์—ฐ์‚ฐ์‹, 2. ์—ฐ์‚ฐ์ž์˜ ์ข…๋ฅ˜

instanceof๋Š” ๊ฐ์ฒด ํƒ€์ž…์„ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค. ํ˜•๋ณ€ํ™˜ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋ฉฐ true / false๋กœ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
๋Œ€์ž… ์—ฐ์‚ฐ์ž๋Š” ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์ธ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ๋‹ค.
instanceof ์—ฐ์‚ฐ์ž๋Š” ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์ธ ์ธ์Šคํ„ด์Šค๊ฐ€ ์˜ค๋ฅธ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์ธ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋˜์—ˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์ด๋ฆ„ instanceof ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์ด๋ฆ„

์˜ˆ์ œ)

public class ClassCastExceptionExample {

	//Animal animal = new Dog();
	//Animal animal = new Cat();
	
	public static void main(String[] args) {
		Dog dog = new Dog();
		changeDog(dog);
		
		Cat cat = new Cat();
		changeDog(cat);
	}

	public static void changeDog(Animal animal) {
		Dog dog = (Dog) animal; //ClassCastException ๋ฐœ์ƒ ๊ฐ€๋Šฅ
	}
}

class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}

๊ฒฐ๊ณผ)

Exception in thread "main" java.lang.ClassCastException: ch10.Cat cannot be cast to ch10.Dog
	at ch10.ClassCastExceptionExample.changeDog(ClassCastExceptionExample.java:17)
	at ch10.ClassCastExceptionExample.main(ClassCastExceptionExample.java:13)

๋งˆ๋ฌด๋ฆฌ

4๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ๋๋‚ด๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ p. 452

1) ์˜ˆ์™ธ: ์‚ฌ์šฉ์ž์˜ ์ž˜๋ชป๋œ ์กฐ์ž‘ ๋˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ž˜๋ชป๋œ ์ฝ”๋”ฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜
์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์€ ๊ณง๋ฐ”๋กœ ์ข…๋ฃŒ๋œ๋‹ค๋Š” ์ ์—์„œ๋Š” ์—๋Ÿฌ์™€ ๋น„์Šทํ•˜๋‹ค.
ํ•˜์ง€๋งŒ ์˜ˆ์™ธ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ(exception handling)์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•˜์ง€ ์•Š๊ณ  ์ •์ƒ ์‹คํ–‰ ์ƒํƒœ๊ฐ€ ์œ ์ง€๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

2) ์˜ˆ์™ธ ํด๋ž˜์Šค: ์ž๋ฐ”์—์„œ๋Š” ์˜ˆ์™ธ๋ฅผ ํด๋ž˜์Šค๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. JVM์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์˜ˆ์™ธ ํด๋ž˜์Šค๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ์—์„œ ์˜ˆ์™ธ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.
๋ชจ๋“  ์˜ˆ์™ธ ํด๋ž˜์Šค๋Š” java.lang.Exception ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค.

3) ์ผ๋ฐ˜ ์˜ˆ์™ธ: ์ปดํŒŒ์ผ๋Ÿฌ ์ฒดํฌ ์˜ˆ์™ธ๋ผ๊ณ ๋„ ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ” ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•ด๋‹น ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค. ๋งŒ์•ฝ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์—†๋‹ค๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
(๋นจ๊ฐ„์ƒ‰ ๋ฐ‘์ค„ ๊ทธ์–ด์ง„๋‹ค.)

4) ์‹คํ–‰ ์˜ˆ์™ธ: ์ปดํŒŒ์ผ๋Ÿฌ ๋„Œ ์ฒดํฌ ์˜ˆ์™ธ๋ผ๊ณ  ํ•œ๋‹ค. ์‹คํ–‰ ์‹œ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์ด ๊ฐ‘์ž๊ธฐ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ์™ธ: ์‚ฌ์šฉ์ž ์กฐ์ž‘ ์‹ค์ˆ˜, ๊ฐœ๋ฐœ์ž ์ฝ”๋”ฉ ๋ฌธ์ œ ๋ฐœ์ƒ ์˜ค๋ฅ˜

10.2 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

10.2.1 ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ p. 453

์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ ์ฒ˜๋ฆฌ ์ˆœ์„œ
์˜ˆ์™ธ ์žˆ์„ ์‹œ 
try → catch → finally

์˜ˆ์™ธ ์—†์„ ์‹œ
try → finally

Try: try๋ฌธ ์•ˆ์— ์žˆ๋Š” ์ฝ”๋“œ๋“ค์ด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ catch ๋ฌธ์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
Catch: try์—์„œ ๋ฐœ์ƒํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
Finally: ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋ฐœ์ƒ์—ฌ๋ถ€๋ฅผ ๋– ๋‚˜ ๋ฌด์กฐ๊ฑด ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ : https://mozi.tistory.com/550

๋ฐœ์ƒํ•œ ์˜ˆ์™ธ: ClassNotFoundException

 

์˜ˆ์ œ 1) ์ผ๋ฐ˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

public class TryCatchFinallyExample {
	public static void main(String[] args) {
		try {
			Class clazz = Class.forName("java.lang.String2");
		} catch(ClassNotFoundException e) {
			System.out.println("ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
		}
	}
}

๊ฒฐ๊ณผ)

ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์˜ˆ์ œ 2) ์‹คํ–‰ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ 

public class TryCatchFinallyRuntimeExceptionExample {
	public static void main(String[] args) {
		String data1 = null;
		String data2 = null;
		
		data1 = args[0];
		data2 = args[1];
			
		System.out.println(data1);
		System.out.println(data2);
	}
}

๊ฒฐ๊ณผ) ArrayIndexOutOfBoundsException: ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฌ๋‹ค.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at ch10.TryCatchFinallyRuntimeExceptionExample.main(TryCatchFinallyRuntimeExceptionExample.java:9)

์˜ˆ์ œ 2.1) ์‹คํ–‰ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

public class TryCatchFinallyRuntimeExceptionExample {
	public static void main(String[] args) {
		String data1 = null;
		String data2 = null;
		
		try {
			data1 = args[0];
			data2 = args[1];
			
			System.out.println(data1);
			System.out.println(data2);
		} catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์˜ ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.");
			return;
		}
		
		try {
			int value1 = Integer.parseInt(data1);
			int value2 = Integer.parseInt(data2);
			int result = value1 + value2;
			//System.out.println(result);
			System.out.println(data1 + "+" + data2 + "=" + result);
		}catch(NumberFormatException e) {
			System.out.println("์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
		}finally {
			System.out.println("๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.");
		}
	}
}

๊ฒฐ๊ณผ 2.1)

์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์˜ ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ 2.2) Run Configurations ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ ํ›„ 2๊ฐœ์˜ ์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์„ ์ค€ ๊ฒฝ์šฐ

10
20
10+20=30
๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.

10.2.2 ์˜ˆ์™ธ ์ข…๋ฅ˜์— ๋”ฐ๋ฅธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ p. 457

1) ๋‹ค์ค‘ catch

catch ๋ธ”๋ก์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ผ ํ• ์ง€๋ผ๋„ ๋‹จ ํ•˜๋‚˜์˜ catch ๋ธ”๋ก๋งŒ ์‹คํ–‰๋œ๋‹ค.
๊ทธ ์ด์œ ๋Š” try ๋ธ”๋ก์—์„œ ๋™์‹œ๋‹ค๋ฐœ์ ์œผ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ  ํ•ด๋‹น catch ๋ธ”๋ก์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

์˜ˆ์ œ) ๋‹ค์ค‘ catch

public class CatchByExceptionKindExample {
	public static void main(String[] args) {
		try {
			String data1 = args[0];
			String data2 = args[1];
			int value1 = Integer.parseInt(data1);
			int value2 = Integer.parseInt(data2);
			int result = value1 + value2;
			System.out.println(data1 + "+" + data2 + "=" + result);
		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์˜ ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.");
		}catch(NumberFormatException e) {
			System.out.println("์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
		}finally {
			System.out.println("๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.");
		}
	}
}

2) catch ์ˆœ์„œ p. 458

์ƒ์œ„ ์˜ˆ์™ธ ํด๋ž˜์Šค๊ฐ€ ํ•˜์œ„ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ณด๋‹ค ์•„๋ž˜์ชฝ์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.
์ด์œ ๋Š” try ๋ธ”๋ก์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ด์ค„ catch ๋ธ”๋ก์€ ์œ„์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๊ฒ€์ƒ‰๋˜๊ณ  ๋งŒ์•ฝ ์ƒ์œ„ ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ catch ๋ธ”๋ก์ด ์œ„์— ์žˆ๋‹ค๋ฉด, ํ•˜์œ„ ์˜ˆ์™ธ ํด๋ž˜์Šค์˜ catch ๋ธ”๋ก์€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

์˜ˆ์ œ)

public class CatchByExceptionKindExample {
	public static void main(String[] args) {
		try {
			String data1 = args[0];
			String data2 = args[1];
			int value1 = Integer.parseInt(data1);
			int value2 = Integer.parseInt(data2);
			int result = value1 + value2;
			System.out.println(data1 + "+" + data2 + "=" + result);

		}catch(ArrayIndexOutOfBoundsException e) {
			System.out.println("์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์˜ ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.");
		}catch(NumberFormatException e) {
			System.out.println("์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
		}catch(Exception e) {//์ƒ์œ„ ํด๋ž˜์Šค
			System.out.println("์‹คํ–‰ ๋งค๊ฐœ๊ฐ’์˜ ์ˆ˜๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.");
		}finally {
			System.out.println("๋‹ค์‹œ ์‹คํ–‰ํ•˜์„ธ์š”.");
		}
	}
}

10.2.3 ์˜ˆ์™ธ ๋– ๋„˜๊ธฐ๊ธฐ p. 460

๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€ ๋์— ์ž‘์„ฑ๋˜์–ด ๋ฉ”์„œ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์œผ๋กœ ๋– ๋„˜๊ธฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. throws ํ‚ค์›Œ๋“œ ๋’ค์—๋Š” ๋– ๋„˜๊ธธ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‚˜์—ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

//์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
void add(int x, int y){
          //try~catch ๋ฌธ์žฅ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
}

void add2(int x, int y) throws ์˜ˆ์™ธ ํด๋ž˜์Šค{

}

add2(1,2)

์˜ˆ์ œ) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋– ๋„˜๊ธฐ๊ธฐ 

public class ThrowsExample {
	public static void main(String[] args) {
		try {
		//๋ฉ”์„œ๋“œ ํ˜ธ์ถœ 
			findClass();
		}catch(ClassNotFoundException e) {
			System.out.println("ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
		}
	}
	
	//๋ฉ”์„œ๋“œ ์„ ์–ธ
	public static void findClass() throws ClassNotFoundException {
		Class clazz = Class.forName("java.lang.String2");
	}
}

๊ฒฐ๊ณผ)

ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ
4๊ฐ€์ง€ ํ‚ค์›Œ๋“œ๋กœ ๋๋‚ด๋Š” ํ•ต์‹ฌ ํฌ์ธํŠธ p. 463

1) ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ‘์ž‘์Šค๋Ÿฌ์šด ์ข…๋ฃŒ๋ฅผ ๋ง‰๊ณ , ์ •์ƒ ์‹คํ–‰์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

2) try-catch-finally ๋ธ”๋ก: ์ƒ์„ฑ์ž๋‚ด๋ถ€์™€ ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์ž‘์„ฑ๋˜์–ด ์ผ๋ฐ˜ ์˜ˆ์™ธ์™€ ์‹คํ–‰ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. 

3) ๋‹ค์ค‘ catch ๋ธ”๋ก: catch ๋ธ”๋ก์ด ์—ฌ๋Ÿฌ ๊ฐœ๋ผ ํ• ์ง€๋ผ๋„ ๋‹จ ํ•˜๋‚˜์˜ catch ๋ธ”๋ก๋งŒ ์‹คํ–‰๋œ๋‹ค.
๊ทธ ์ด์œ ๋Š” try ๋ธ”๋ก์—์„œ ๋™์‹œ๋‹ค๋ฐœ์ ์œผ๋กœ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ฆ‰์‹œ ์‹คํ–‰์„ ๋ฉˆ์ถ”๊ณ  ํ•ด๋‹น catch ๋ธ”๋ก์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

4) throws ํ‚ค์›Œ๋“œ: ๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€ ๋์— ์ž‘์„ฑ๋˜์–ด ๋ฉ”์„œ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š์€ ์˜ˆ์™ธ๋ฅผ ํ˜ธ์ถœํ•œ ๊ณณ์œผ๋กœ ๋– ๋„˜๊ธฐ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. throws ํ‚ค์›Œ๋“œ ๋’ค์—๋Š” ๋– ๋„˜๊ธธ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ๋‚˜์—ดํ•ด์ฃผ๋ฉด ๋œ๋‹ค.


728x90
๋ฐ˜์‘ํ˜•
Comments