์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- Absolute
- AGI
- ai
- AI agents
- AI engineer
- AI researcher
- ajax
- algorithm
- Algorithms
- aliases
- Array ๊ฐ์ฒด
- ASI
- bayes' theorem
- Bit
- Blur
- BOM
- bootstrap
- canva
- challenges
- ChatGPT
- Today
- In Total
A Joyful AI Research Journey๐ณ๐
[40] 230223 Java Ch. 10 ์์ธ ์ฒ๋ฆฌ: 1. ์์ธ ํด๋์ค, 2. ์์ธ ์ฒ๋ฆฌ [K-๋์งํธ ํธ๋ ์ด๋ 40์ผ] ๋ณธ๋ฌธ
[40] 230223 Java Ch. 10 ์์ธ ์ฒ๋ฆฌ: 1. ์์ธ ํด๋์ค, 2. ์์ธ ์ฒ๋ฆฌ [K-๋์งํธ ํธ๋ ์ด๋ 40์ผ]
yjyuwisely 2023. 2. 23. 12:48230223 Thu 40th class
Ch. 10 ์์ธ ์ฒ๋ฆฌ
์ง๋: p. 453 ~ (๊ต์ฌ: ํผ์ ๊ณต๋ถํ๋ ์๋ฐ, ์ ์: ์ ์ฉ๊ถ)
ํ๋น๋ฏธ๋์ด_ํผ๊ณต์_์ฉ์ด์ง.pdf
์ฉ์ด ์ฐธ๊ณ
์ค๋ ๋ฐฐ์ด ๊ฒ ์ค ๊ธฐ์ตํ ๊ฒ์ ์ ๋ฆฌํ๋ค.
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์ด ๋ฐ์ํ๋ค.
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
์์ 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 ํค์๋ ๋ค์๋ ๋ ๋๊ธธ ์์ธ ํด๋์ค๋ฅผ ์ผํ๋ก ๊ตฌ๋ถํด์ ๋์ดํด์ฃผ๋ฉด ๋๋ค.