본문 바로가기
자바(Java)

자바 입문하기18 - throws, throw

by codeyaki 2022. 1. 12.
반응형

해당 강의를 보고 정리한 것입니다.

https://programmers.co.kr/learn/courses/5

 

자바 입문

자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금

programmers.co.kr


Throws

: 예외가 발생했을 때 예외를 호출한 쪽에서 처리하도록 던져주는 것

public class ExceptionExam2 {

	public static void main(String[] args) {
		int i = 10;
		int j = 0;
		try {
		int k = divide(i,j);
		System.out.println(k);
		}catch(ArithmeticException e) {
			System.out.println(e);
		}
	}
	
	public static int divide(int i, int j) throws ArithmeticException{
		int k = i/j;
		return k;
	}

}
  • divide 클래스에서는 오류를 처리하지 않고 호출하는 main클래스에서 오류를 처리해주는 것
  • 한 번에 관리하고자 할 때 사용하면 좋을 것 같다

Throw

: 강제로 오류를 발생시키는 키워드, 보통 throws와 같이 사용됨

 

public class ExceptionExam3 {
	public static void main(String[] args) {
		int i = 10;
		int j = 0;
		
		int k = divide(i,j);
		System.out.println(k);
	}
	
	
	public static int divide(int i, int j) {
		if(j == 0 ) {
			System.out.println("divide의 두번째 매개변수는 0이 올 수 없습니다.");
			return 0;
		}
		int k = i/j;
		return k;
	}
}
  • divide의 두 번째 파라미터의 값이 0일 경우 나누기를 할 때 divide는 0을 리턴 함.
  • 하지만 0으로 나누기를 한 결과는 0이 아니기 때문에 추후 다른 곳에서 더 큰 문제를 야기할 수 있음

throw를 이용해 에러를 발생하지 않으며, 올바르지 않은 결과를 리턴하지 않도록 수정

public static int divide(int i, int j) throws IllegalArgumentException{
	if(j == 0 ) {
		throw new IllegalArgumentException("0으로 나눌수 없습니다");
	}
	int k = i/j;
	return k;
}
  • j에 0이 올 경우 new 연산자를 통해 IllegalArgumentException객체가 생성
  • throw는 해당 라인에서 예외가 발생한다는 의미
    즉, 해당 줄에서 오류가 발생.("0으로 나눌수 없습니다"라는 오류 발생)
  • Exception클래스 이름을 보면 아규먼트가 잘못됐기 때문에 발생한 오류라는 걸 알 수 있다.

divide 메서드를 호출 한 쪽에서의 오류 처리

  • divide 메서드 뒤에 throws IllegalArgumentException : 해당 오류는 divide를 호출한 쪽에서 처리를 해야 한다.
public class ExceptionExam3 {
	public static void main(String[] args) {
		int i = 10;
		int j = 0;
		
		try {
			int k = divide(i,j);
			System.out.println(k);
		}catch(IllegalArgumentException e) {
			System.out.println(e);
		}
	}
	
	
	public static int divide(int i, int j) throws IllegalArgumentException{
		if(j == 0 ) {
			throw new IllegalArgumentException("0으로 나눌수 없습니다");
		}
		int k = i/j;
		return k;
	}
}

>>

java.lang.IllegalArgumentException: 0으로 나눌 수 없습니다

반응형