Java

[Java/자바]예외처리 throw,throws

둥구는 지굴다 2022. 10. 6. 16:43

안녕하세요 오늘은 자바에서 사용되는 throw, throws에 대해 알아보도록 해요!

우선 throw, throws에 대해 알기 위해서는 예외처리에 대한 기본적인 개념이 있어야 합니다.

예외처리 및 try-catch에 대한 글은 밑에 링크에서 읽어주세요!

https://nangnyamnyomnyomnyom.tistory.com/41

 

[Java/자바]예외처리 try-catch-finally

안녕하세요 오늘은 자바에서 예외처리를 하는 방법 중 try-catch-finally문에 대해 알아보겠습니다! 예외처리를 알아보기전에 우선 예외란 무엇인지 알아봅시다! 예외란?(Exception) 예외란 프로그램

nangnyamnyomnyomnyom.tistory.com

우선 자바는 객체지향 언어이기에 예외도 객체로 처리합니다.

따라서 예외 클래스의 상속 관계를 알아봅시다.

<예외 클래스의 상속 관계>

  • 모든 예외 클래스들은 Exception클래스를 상속받습니다. 다라서 Exception으로 예외를 처리할 수 있습니다.
  • 예외 클래스들에서 Exception클래스에 정의되어있는 메서드를 사용할 수 있습니다.
  • ex) getMessage( ), toString( ), printStackTrace( )와 같은 Exception클래스의 메서드를 사용할 수 있습니다.

thorw (예외 발생)

throw는 프로그래머가 고의로 예외를 발생시킬 때 사용하는 방법입니다.

[구조]

Exception e= new Exception("Exception");
throw e;

throw 사용 예시 코드

public class Throw {

	public static void main(String[] args) {
		try {
			Exception e=new Exception("고의 예외");
            //"고의 예외" 내부적으로 저장 객체.getMessage( )를 호출하면 출력된다.
			throw e;//고의적으로 예외를 던지겠다
		}catch(Exception e) {
			System.out.println("예외 발생");
			System.out.println(e.getMessage());
		}
	}

}

위와 같이 throw e를 try문에 넣어 고의적으로 예외를 발생시켜 보았습니다.

getMessage( )는 에러 이벤트와 함께 들어오는 메시지를 출력합니다.

따라서 "고의 예외"가 e라는 변수에 저장되어 있기 때문에 출력이 됩니다.

출력 결과

throws

throws란 예외가 발생했을 경우 현재 메서드가 예외를 처리하지 않고 호출 한쪽으로 예외 처리에 대한 책임을 넘기는 것입니다.

[구조]

void method() throws Exception{...}

throws 시, 메서드 선언 부에 throws키워드를 붙여, 메서드 호출하는 부분에서 처리하도록 하는 기법입니다.

throws예시 코드

public class Throws {

	public static void main(String[] args) {
		try {
			methodA();
		}catch(Exception e) {
			System.out.println("메인에서 처리");
		}
	}
	public static void methodA() throws Exception{
		methodB();
	}
	public static void methodB()throws Exception{
		methodC();
	}
	public static void methodC()throws Exception{
		Exception e= new Exception();
		throw e;//예외 발생
	}
}

methodA는 methodB를 호출하고 methodB는 methodC를 호출합니다.

근데 methodC에서 throw를 이용해 고의적으로 예외를 발생했습니다.

methodC는 throws로 인해 호출한 곳으로 가서 예외를 처리해야 합니다.

호출한 곳을 찾아 쭉쭉 올라갑니다. 다시 methodB로 methodA 근데 최종적으로 main method( )에서 호출이 됐습니다.

따라서 main메서드가 try-catch문으로 예외를 처리합니다.

이해가 되실지 모르겠지만 그림으로 조금 설명해보았습니다.

methodA( ) => methodB( )=> methodC=> trhows로 인해 호출한 곳으로 리턴 methodB( ) => methodA( ) => main( )

 

출력 결과


이상으로 오늘 글 마치겠습니다.

글 읽어주셔서 감사합니다!