[ 클래스를 만드는 사람과 main을 만드는 사람이 다를 때 ]
클래스를 만든 사람은 직감한다. num 값으로 0을 넣으면 터진다는 것을...
그러면 클래스를 만든 사람이 예외처리를 해서 코드를 전달한다.

1. CHECKED EXCEPTION 부모가 무조건 감지해서 알려주는 방법 ★
package ex08.example2;
class Cal3 {
void divide(int num) throws Exception {
System.out.println(10 / num);
}
}
public class TryEx05 {
public static void main(String[] args) {
Cal3 c3 = new Cal3();
c3.divide(0);
}
}
호출한 곳에서 try-catch 구현하게 메소드에 throws Exception 제약조건만 걸고 넘김
package ex08.example2;
class Cal3 {
void divide(int num) throws Exception {
System.out.println(10 / num);
}
}
public class TryEx05 {
public static void main(String[] args) {
Cal3 c3 = new Cal3();
try {
c3.divide(0);
} catch (Exception e) {
System.out.println("0 ㄴㄴ");
}
}
}

해당 코드는 클래스로 작성이 안되어있지만, 보통은 에러 발생 이름으로
class ZeroDivideException extends Exception 이런 식으로 클래스를 만들고,
class Cal3 {
void divide(int num) throws ZeroDivideException { 이런식으로 만들어서 넘긴다.
2. 라이브러리 만든 사람이 제어권을 가지는 방법
package ex08;
class Cal4 {
void divide(int num) {
try {
System.out.println(10 / num);
} catch (Exception e) {
System.out.println("0 쓰지마라~");
}
}
}
public class TryEx05 {
public static void main(String[] args) {
Cal4 c4 = new Cal4();
c4.divide(0);
}
}

클래스 메소드에서 try-catch 구현을 다 해놨다.
= 제어권이 라이브러리 작성자한테 있다.
= [ 0 쓰지마라~ ] 라는 말이 고정되어서 나오게 생겼다.
3. 내가 제어권을 가지고 싶다! 문구 마음에 안들어!! 방법
class Cal4 {
void divide(int num) {
try {
System.out.println(10 / num);
} catch (Exception e) {
throw new RuntimeException("0 쓰지마라~");
}
}
}
public class TryEx05 {
public static void main(String[] args) {
Cal4 c4 = new Cal4();
try {
c4.divide(0);
} catch (Exception e) {
System.out.println("0으로 나눌 수 없어요!");
}

throw로 던져주면 호출한 곳에서 새로 문구를 바꿀 수 있다!
throw로 걸어놨으면 제어권을 뺏을 수 있음
그러나… try-catch로 이렇게 묶어버리면 제어권 못 뺏음 ㅠㅠ
class Cal4 {
void divide(int num) {
try {
System.out.println(10 / num);
} catch (Exception e) {
System.out.println("0 쓰지마라!");
//throw new RuntimeException("0 쓰지마라~");
}
}
}
public class TryEx05 {
public static void main(String[] args) {
Cal4 c4 = new Cal4();
try {
c4.divide(0);
} catch (Exception e) {
System.out.println("0으로 나눌 수 없어요!");
}
throw는 뺏어요, try-catch는 못뺏어요.
main메소드에 throw Exception로 제약조건을 걸면 JVM한테 토스하는거니 X
Share article