java 9일차 - 2(예외처리)

KHLee·2023년 3월 7일

자바수업

목록 보기
11/46



또는(|)을 사용하여 한번에 처리도 가능. 그러나 에러처리가 동일하게 적용됨.

Exception은 모든 예외의 조상이기 떄문에 한번에 묶어서 예외처리를 할 수도 있긴 하다.

return을 통해 아래 코드들을 실행하지 않고 함수를 종료시킬 수 있지만, sc.close()가 안되는 문제가 발생함.

finally를 사용함.

정상적으로 종료돼도 finally는 실행이 되고, 예외처리가 발생해도 finally는 실행됨.
코드가 왜 이렇게 지저분해!! -> 스프링에서는 처리하는 프로그램이 있다.

finally 말고 sc를 종료하는 방법이 있지만 자주 안쓰임. try() 안에 입력.

참고

값은 infinity로 출력됨.

자바 내장 오류는 쉽게 처리가 가능한데, 금결원 전산 오류예외/ 잔액부족 예외 등은 직접 만들어줘야 하는 부분이다!!!!


위는 실행예외. 코드가 잘못됐을 가능성이 높음!

어레이 크기를 벗어났다는 에러

Thread.sleep(2000);//실행 간격을 두어서 서버 부하를 줄인다.

교재 보고 이론 조금 정리해보기


계산기를 만들어서 에러내기.

위와 같은 경우 CalUi(화면)에서 오류가 났다고 하지만 실제로 Cal(기능)에서 오류가 난 것.

따라서 위처럼 오류처리를 하면 Cal에서만 오류메세지가 처리되고 CalUi에서 오류 처리가 안된다. 따라서 CalUi로 에러를 던지는 처리가 필요함. CalUi에서 유저에게 오류메세지를 보여줘야함


throws로 오류가 발생할 수 있음을 처리해줌.

오류를 어디서 잡아서 어디서 처리할 것인지가 매우 중요함!!

에러메세지를 고객 화면에 보여주기 위해서는 에러 발생한 프로그램에서 에러를 App까지 던져주고 처리해야 함.

package cal;

public class Cal {
	public static double div(int a, int b) throws Exception{
		double result = 0.0;
		try {
			result =  a / b;
		}catch(ArithmeticException e) {
			throw e;
		}
			return result;

	}
	public static double div(double a, double b) {
		double result = 0.0;
		result =  a / b;
		return result;
	}
}
package cal;

import java.util.Scanner;

public class CalUi {

	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("input 2 number");
		int a = Integer.parseInt(sc.next());
		int b = Integer.parseInt(sc.next());
		double result;
		try {
			result = Cal.div(a, b);
			System.out.println(result);
		} catch (Exception e) {
			System.out.println("0으로 못나눔");
			//e.printStackTrace();
		}
//		System.out.println(result);
		sc.close();
	}

}

사용자 정의 exception?

우리가 에러를 만들어서 던질거야.

package cal;

public class InfinityException extends Exception{
	//java는 exception의 상속을 받아야 에러처리가 가능하다.
	public InfinityException() {
		
	}
	public InfinityException(String msgcode) {//에러코드를 보낼거다
		super(msgcode);
	}

}
package cal;

public class Cal {
	public static double div(int a, int b) throws Exception{
		double result = 0.0;
		try {
			result =  a / b;
		}catch(ArithmeticException e) {
			throw e;
		}
			return result;

	}
	public static double div(double a, double b) throws InfinityException {
		double result = 0.0;
		if(b == 0.0) {//어떤 예외를 던져줘야해? 우리가 만들어야 해.
			throw new InfinityException("B0001");//우리가 에러를 만들어서 던졌다. 함수에도 던진다는 표시를 해야해.
			//throw와 throws는 항상 함께 쓴다.
			//에러를 던지면 아래 코드는 실행 안됨.
		}
		result =  a / b;
		return result;
	}
}
package cal;

import java.util.Scanner;

public class CalUi2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("input 2 number");
		double a = Double.parseDouble(sc.next());
		double b = Double.parseDouble(sc.next());
		double result = 0.0;

		try {
			result = Cal.div(a, b);
		} catch (InfinityException e) {
			System.out.println(e.getMessage());
		}

		System.out.println(result);

		sc.close();
	}

}
package cal;

import java.util.Scanner;

public class CalUi {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("input 2 number");
		int a = Integer.parseInt(sc.next());
		int b = Integer.parseInt(sc.next());
		double result;
		//try catch 없이 throws Exception을 선언하는 것만으로 예외처리가 가능한지 확인하였지만 불가능.
//		result = Cal.div(a, b);
//		System.out.println(result);

		
		try {
			result = Cal.div(a, b);
			System.out.println(result);
		} catch (Exception e) {
			System.out.println("0으로 못나눔");
			//e.printStackTrace();
		}
//		System.out.println(result);
		sc.close();
	}

}
profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2023년 3월 7일

ㅇㅇ

답글 달기