JAVA exception(checked, unchecked), throws (230629)

이원건·2023년 6월 29일
0

JAVA

목록 보기
24/33
post-thumbnail

1. throws 에 대하여 설명하시오.

  • method 선언부에 작성하는 문법이며 throws 뒤에는 예외를 처리할 타입을 지정해준다(Exception 포함 자식 클래스 타입들)
    method를 호출한 주체에게 예외처리를 맡기는 것이며, main을 호출한 주체는 JVM이기 때문에 JVM이 Exception을 처리해준다.(내부적으로 e.printStackTrace()를 출력하고 프로그램을 강제로 종료한다.)

2. checked 와 unchecked Exception 을 설명하시오.

  • exception 자식 클레스로 checked exception(IOException)과 unchecked Exception(RuntimeException)이 있는데 checked exception은 호출한 주체에게 무조건 try/catch로 처리해줄 것을 컴파일 상에서부터 알려주는 역할을 한다. unchecked exception은 꼭 exception 처리를 안 해줘도 컴파일 상에선 문제가 생기지 않는다. 물론 checked exception에 해당하는 method를 사용했을 경우에도 method를 호출한 주체, method에 뒤에 throws exception을 붙이면 그 method를 호출한 method에게 계속 넘길 수 있다. 하지만 이것은 좋은 exception처리 방법이 아니며, 끝까지 갈 경우 결국엔 JVM에서 처리를 맡게 된다. 그리고 그것은 우리가 항상 보는 exception(e.printStackTrace()) 메시지이다. 그후 예외 발생한 곳에서 바로 프로그램이 종료된다.

3. 아래가 컴파일 에러가 나는 이유에 대하여 설명하시오.

  • 문제
try {
	int num = 6 / 0;
} catch (Exception e) {
	e.printStackTrace();
} catch (InputMismatchException e) {
	e.printStackTrace();
}
  • 다형성 때문에 Exception에 모든 예외가 들어갈 수 있기 때문에 InputMsimatchException 이 있는 catch문까지는 도달할 수 없기 때문에 컴파일 에러가 난다.
    만약 사용하고 싶다면
try {
	int num = 6 / 0;
} catch (InputMismatchException e) {
	e.printStackTrace();
} catch (Exception e) {
	e.printStackTrace();
}

이런 식으로 바꿔주면 된다.


4.아래의 의미는?

  • 문제
public static void main(String[] args) throws Exception  {   

}
  • method 선언부 뒤에 throws Exception 썼기 때문에 해당 method를 호출한 주체에게 예외 처리를 맡긴다. 여기서 main을 호출한 주체는 JVM이기 때문에 JVM이 Exception을 처리해준다.(내부적으로 e.printStackTrace()를 출력하고 프로그램을 강제로 종료한다.)

5. 아래를 프로그래밍 하시오.

  • 문제(결과)
1~100 사이에 숫자를 맞춰보세요 :
50
Down
1~100 사이에 숫자를 맞춰보세요 :
25
UP
1~100 사이에 숫자를 맞춰보세요 :
43
Down
1~100 사이에 숫자를 맞춰보세요 :
30
UP
1~100 사이에 숫자를 맞춰보세요 :
35
정답입니다.5회 만에 맞췄어요.
  • 코드
import java.util.Scanner;

public class GameMain {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		int num = 0;
		int count = 1;
		int answer = (int) (Math.random() * 100 + 1);
		while (true) {
			try {
				System.out.print("1~100 사이의 숫자를 맞혀보세요 :");
				num = Integer.parseInt(scanner.nextLine());
			} catch (Exception e) {
				System.out.println("숫자를 제대로 입력해주세요.");
				continue;
			}

			if (num > answer)
				System.out.println("DOWN");
			else if (num < answer)
				System.out.println("UP");
			else if (num == answer) {
				System.out.println("정답입니다." + count + "회 만에 맞혔어요.");
				break;
			}
			count++;
		}

	}
}
  • 실행결과
1~100 사이의 숫자를 맞혀보세요 :k
숫자를 제대로 입력해주세요.
1~100 사이의 숫자를 맞혀보세요 :aslkdjfalksdjf
숫자를 제대로 입력해주세요.
1~100 사이의 숫자를 맞혀보세요 :50
DOWN
1~100 사이의 숫자를 맞혀보세요 :25
DOWN
1~100 사이의 숫자를 맞혀보세요 :13
DOWN
1~100 사이의 숫자를 맞혀보세요 :7
DOWN
1~100 사이의 숫자를 맞혀보세요 :4
UP
1~100 사이의 숫자를 맞혀보세요 :5
정답입니다.6회 만에 맞혔어요.

0개의 댓글