[Way to PM] 백엔드(자바) - 예외처리 dailyQuiz

2024. 2. 6. 21:35[Way to PM] 백 엔드

1. 예외에 대한 설명 중 틀린것은?

  1. 예외는 사용자의 잘못된 조작, 개발자의 잘못된 코딩으로 인한 프로그램 오류를 말한다.
  2. RuntimeException의 하위 예외는 컴파일러가 예외 처리 코드를 체크하지 않는다.
  3. 예외는 try-catch 블록을 사용해서 처리된다
  4. 자바 표준 예외만 프로그램에서 처리할 수 있다 --> 틀렸음

review

1. 자바는 예외가 발생하면 프로그램을 중단하고 오류 메시지를 보내줌. 이 경우에 예외처리를 해준다면 프로그램 중단없이 오류 메시지를 출력하고 다음 프로세스로 넘어가도록 조치할 수 있다.

2. 컴파일러가 예외 처리 코드를 체크하는 Exception으로 SQL, IO, ClassNotFound가 있다. 

3. try문에서 예외 발생 시 catch문에서 코드 수행하여 예외 해결. catch문은 여러개 가능하며 1에서 해결되지 않는다면 2로 넘어간다. 상위 예외 클래스가 하위 예외 클래스보다 아래에 위치해야 한다.

4. 사용자 정의 예외처리를 통해 표준에서 벗어나도 예외처리가 가능하다. 사용자 정의 예외는 자바의 예외 클래스를 상속받아 정의한 예외 클래스를 의미하며, 이러한 예외도 예외 처리 코드인 try-catch 블록을 사용하여 처리할 수 있다.

2. try-catch-finally 블록에 대한 설명 중 틀린 것은?

  1. try { } 블록에는 예외가 발생할 수 있는 코드를 작성한다.
  2. catch { } 블록은 try { } 블록에서 발생한 예외를 처리하는 블록이다.
  3. try { } 블록에서 return문을 사용하면 finally { } 블록은 실행되지 않는다. --> 틀렸음
  4. catch { } 블록은 예외의 종류별로 여러 개를 작성할 수 있다.

review

1, 2, 4

try {
    <수행할 문장 1>;
    <수행할 문장 2>;
    ...
} catch(예외1) {
    <수행할 문장 A>;
    ...
} catch(예외2) {
    <수행할 문장 a>;
    ...
}

혹은

try {
   수행 코드 1
    } 
    catch (예외 1\예외2)  { // 멀티 캐치 -> 예외 1, 2 중 하나에 해당하면 a 실행
    수행 코드 a
    }

3. return문을 사용해도 finally는 무조건 실행

 

3. throws에 대한 설명으로 틀린 것은?

  1. 생성자나 메소드의 선언 끝 부분에 사용되어 내부에서 발생된 예외를 떠넘긴다.
  2. throws 뒤에는 떠넘겨야 할 예외를 쉼표(,)로 구분해서 기술한다.
  3. 모든 예외를 떠넘기기 위해 간단하게 throws Exception으로 작성할 수 있다.
  4. 새로운 예외를 발생시키기 위해 사용된다. -> 틀렸음

review

1. 생성자에 사용되어 내부에서 발생된 예외를 떠넘기는 예시

public void myMethod() throws MyException {
    // 예외를 발생시키는 코드
    if (someCondition) {
        throw new MyException("사용자 정의 예외 발생");
    }
}

 

2.

public void myMethod() throws ExceptionType1, ExceptionType2 {
    // 예외를 발생시키는 코드
}

 

3. 모든 예외를 떠넘기기 위해서는 메소드 선언부에 throws Exception과 같이 작성할 수 있다. 이렇게 하면 해당 메소드가 발생할 수 있는 모든 예외를 호출자에게 떠넘기는 것이므로, 호출자는 예외 처리를 직접 수행하거나 또다른 상위 호출자에게 예외 처리를 위임해야 한다.

 

4. 새로운 예외를 발생시키는 것은 throw

 

4. throw에 대한 설명으로 틀린 것은?

  1. 예외를 최초로 발생시키는 코드이다.
  2. 예외를 호출한 곳으로 떠넘기기 위해 메소드 선언부에 작성된다. -> 틀렸음
  3. throw로 발생된 예외는 일반적으로 생성자나 메소드 선언부에 throws로 떠넘겨진다.
  4. throw 키워드 뒤에는 예외 객체 생성 코드가 온다.

review

1. 예외를 최초로 발생시키는 코드는 throw키워드를 사용하여 예외 객체를 생성하여 던지는 코드를 의미한다. 이 코드는 예외 상황 발생 시 해당 예외를 발생시키는 역할을 한다.

2. 예외를 호출한 곳으로 떠넘기는 키워드는 throws

3, 4. throw new 형태로 예외 객체를 생성하고 throws를 통해 전달하고 메시지나 정보를 담을 수도 있다.

5. 다음과 같은 메소드가 있을 때 예외를 잘못 처리한 것은 무엇입니까?

public void method1() throws NumberFormatException, ClassNotFoundException { ... }
  1. try { method1(); } catch(Exception e) { }
  2. void method2() throws Exception { method1() };
  3. try { method1(); } catch(Exception e) { } catch(ClassNotFoundException e) { } -> 틀렸음
  4. try { method1(); } catch(ClassNotFoundException e) { } catch(NumberFormatException e) { }

review

1. 예외 관련 최상위 클라스인 Exception 클래스의 매개변수로 실제 발생한 예외 객체를 인자로 받아 수행문을 실행시켜 예외를 처리한다.

2. method2내부에 있는 method1에서 오류가 발생했을 때 Exception에 던져서 예외처리한다.

3. catch예외처리시 하위 클래스의 예외부터 처리해야 한다.

4. 하위클래스부터 예외처리 한다.

6. 다음 코드가 실행되었을 때 출력 결과는 무엇입니까?

public class TryCatchFinallyExample {

	public static void main(String[] args) {
		String strArray[] = {"10", "23b"};
		int value = 0;
		for (int i = 0; i < 2; i++) {
			try {
				value = Integer.parseInt(strArray[i]);
			} catch (ArrayIndexOutOfBoundsException e) {
				System.out.println("인덱스를 초과하였음");
			} catch (NumberFormatException e) {
				System.out.println("숫자로 변환할 수 없음");
			} finally {
				System.out.println(value);
			}
		}
	}

}

-> 

10

숫자로 변환할 수 없음

10