devFancy BE Developer

throw와 throws 차이

2022-12-05
devfancy

  • throw와 throws차이를 짚고 가기 이전에, try-catch 문에 대한 개념을 먼저 알고 가자.

try-catch 문

try {
     예외가 발생할 가능성이 있는 실행문
}catch (Exception 클래스명 e){
     예외 처리문
}
  • try 블록에 실제 실행되어야 하는 코드가 들어가며 Exception이 발생할 가능성이 있는 코드가 들어간다.

  • catch 블록에는 Exception이 발생하면 실행되는 코드가 들어갑니다. 즉 예외 처리를 하는 코드다.


throw 와 throws 차이

throw

  • throw : 개발자가 의도적으로 예외를 발생시키는 것이다.

  • throw라는 키워드를 이용하며, 주로 비즈니스 로직을 구현하는 과정 중 컴파일에는 문제가 없지만 해당 비즈니스 로직이 개발자가 의도한 대로 통과하지 못했을 경우 고의로 예외를 발생시켜야 할 때 사용한다.

  • 다음 예시는 숫자가 아닌 경우 혹은 3미만 20 초과인 경우 예외를 발생시키는 경우다.

  • 여기서 min은 3, max는 20을 의미한다.

  • 예외가 발생하면, IllegalArgumentException()으로 처리된다.

  • IllegalArgumentException() : 적합하지 않거나(illegal) 적절하지 못한(inappropriate) 인자를 메서드에 넘겨주었을 때 발생합니다.

  • 이처럼 throw 키워드를 사용하면 개발자의 판단에 따라 강제로 예외를 발생시킬 수 있다.

throws

  • throws : 메서드 내에서 예외 처리를 하지 않고 해당 메서드를 사용한 곳에서 예외 처리를 하도록 예외를 다른 곳으로 던지는 것이다.

  • 즉, 예외를 전가시키는 것이다.

public class Test {
	public static void main(String[] args) {
		int a = 2;
		int b = 0;
		try {
			divide(a,b);
		} catch (ArithmeticException e) {
			e.printStackTrace();
		}

	}

	public static int divide(int a, int b) throws ArithmeticException {
		if (b == 0) {
			throw new ArithmeticException("0으로 나눌 수 없습니다.");
		}
		return a / b;
	}
}
  • 여기서 divide 메서드는 예외를 자신이 처리하지 않고 throws 키워드를 통해 자신을 호출한 main 메서드에게 책임을 전가했다.

  • 이 divide 메서드를 호출한 main 메서드에서 try catch 문을 통해 예외 처리를 진행했다.

정리하자면,

throw는 강제로 예외를 발생시키는 것이며, 개발자의 의도에 따라 강제로 예외를 발생시킬 수 있고, throws는 자신을 호출한 메서드에게 책임을 전가하여 호출한 메서드에서 예외 처리를 하도록 강요하는 것이다.

  • throw를 사용하는 이유는 예외가 발생할 수 있는 코드가 있다는 것을 인지시키고 예외 처리를 강요하며, 여러 가지 발생 가능한 예외들을 호출한 메서드에서 한 번에 처리할 수 있게 하는 장점이 있다.

Comments

Index