자바 메서드 호출 과정
자바 실행 시 main() 메서드 호출을 시작으로, 메서드가 호출되고 종료되는 과정
- 자바 프로그램을 실행하면, main() 메서드가 처음 실행됨
- 이 때에 JVM은 현재 실행 중인 메서드명인 main()를 메모리의 Stack area(스택 영역)에 저장해줌
- main() 메서드에서 m1() 메서드를 호출하여 m1() 메서드를 실행하면, m1 메서드명을 Stack에 저장
- m1() 메서드에서 다시 m2() 메서드를 호출하면, m2 메서드명을 Stack에 저장
- m2() 메서드의 실행을 완료한 후 m1() 메서드로 복귀하면, m2 메서드명을 Stack에서 삭제
- m1() 메서드의 실행을 완료한 후 main() 메서드로 복귀하면, m1 메서드명을 Stack에서 삭제
- 최종적으로 main() 메서드의 실행을 종료하면 모든 메서드명을 Stack에서 삭제함
throws로 예외 처리하기
throws
- 이러한 메서드의 호출 과정에서 예외가 발생하면, 발생한 예외를 메서드를 호출한 곳으로 넘기는 방법
[ throws와 throw ]
throws
예외가 발생하면, 발생한 예외를 메서드를 호출한 곳으로 떠넘김
throw
사용자가 명시적으로 예외를 발생시키는 것
throw new 예외클래스생성자();
용도
- try/catch문으로 예외 처리를 하면, 메서드의 기능이 많아지므로 코드가 복잡해질 수 있음
- 이 때에 throws로 예외 처리를 따로 해줄 수 있으므로, 코드의 가독성을 높임
throws를 이용한 예외 처리 방법
- 예외가 발생하면, 그 예외를 메서드를 호출한 곳으로 떠넘겨서 예외를 처리하는 것
- 최초로 메서드를 호출한 main() 메서드에서 try/catch문으로 예외를 처리해야 함
- RuntimeException(런타임 예외) 계열의 예외 발생시, throws를 생략할 수 있음
- 메서드의 코드가 복잡할 경우에, 예외를 호출한 곳으로 예외를 떠넘겨 코드의 가독성을 높일 수 있음
형식
public 리턴타입 메서드명() throws 예외클래스1, 예외클래스2... {
}
- throws 키워드 다음에 떠넘기고 싶은 예외 클래스를 콤마(,)를 이용하여 나열
- 모든 예외를 떠넘기고 싶다면 throws 다음에 최상위 예외 클래스인 Exception을 써주면 됨
public int throwsFunction() throws NumberFormatException, IOException {
}
public int throwsFunction() throws Exception {
}
예제
- 키보드로 숫자가 아닌 문자열 입력 시에 NumberFormatExcetion이 발생하면
- 오류가 발생한 메서드에서는 throws 키워드를 이용하여 발생한 에러를 메서드를 호출한 곳으로 떠넘김
메서드의 코드량이 증가하면, 메서드 내에서 try/catch문으로 예외를 처리하는 것보다 예외를 호출한 메서드로 발생한 예외를 떠넘김으로써 일관성있게 처리하는 것이 가독성과 유지관리성을 높일 수 있음
public class ThrowsTest {
// 해당 메서드에서 예외가 발생하면, 이 메서드를 호출한 곳으로 예외를 떠넘김
public static int inputScore() throws NumberFormatException { // 숫자 아닌 문자열 입력시 오류 발생
int score = 0;
Scanner sc = new Scanner(System.in);
System.out.println("점수를 입력하세요");
String str = sc.nextLine();
score = Integer.parseInt(str);
return score;
}
// main() 메서드
public static void main(String[] args) {
try {
int score = inputScore();
System.out.println("입력 점수 : " + score + "점");
} catch (NumberFormatException e) {
System.out.println("숫자만 입력 가능합니다");
}
System.out.println("프로그램 종료");
}
}
[ 실행 결과 ]
'JAVA' 카테고리의 다른 글
[JAVA] 컬렉션 프레임워크와 종류 (0) | 2024.04.25 |
---|---|
[JAVA] 예외처리: 사용자 정의 예외 클래스 (0) | 2024.04.24 |
[JAVA] 예외 처리: 다중 catch문, 사용 시 주의할 점 (0) | 2024.04.24 |
[JAVA] 에러와 예외, 예외의 종류 (0) | 2024.04.24 |
[JAVA] 예외처리: try-catch문, finally문 (0) | 2024.04.24 |