JAVA & Spring

[JAVA] 이것이 자바다 11장 연습문제 (예외 처리)

mkm101 2023. 3. 28. 12:45
반응형

1. 예외에 대한 설명 중 틀린 것은 무엇입니까?

   1. 예외는 사용자의 잘못된 조작, 개발자의 잘못된 코딩으로 인한 프로그램 오류를 말한다.

   2. RuntimeException의 하위 예외는 컴파일러가 예외 처리 코드를 체크하지 않는다.

   3. 예외는 try-catch 블록을 사용해서 처리된다.

   4. 자바 표준 예외만 프로그램에서 처리할 수 있다.

 

4 : Java 예외처리는, 프로그램에서 표준 예외와 사용자 지정 예외를 모두 처리 할 수 있다.

 

표준 예외란 ?:  JAVA API 일부인 미리 정의된 예외이며, 프로그램 실행중에 발생 할 수 있는 일반적인 오류를 나타낸다.

                         자바에서는 이러한 예외를 처리하기 위해, 일련의 표준 예외 클래스를 제공한다.

 

사용자 지정 예외란 ? : 직접 짠 코드에서 특정한 오류를 처리하기위해 사용자 지정 예외 클래스를 정의할 수 있도록 JAVA                                       에서 지원한다.

 

 

 

2. try-catch-finally 블록에 대한 설명 중 틀린 것은 무엇입니까?

  1. try {} 블록에는 예외가 발생할 수 있는 코드를 작성한다.

  2. catch {} 블록은 try {} 블록에서 발생한 예외를 처리하는 블록이다.

  3. try {} 블록에서 return 문을 사용하면 finally {} 블록은 실행되지 않는다.

  4. catch {} 블록은 예외의 종류별로 여러 개를 작성할 수 있다.

 

3 : return 문을 사용해도, finally {} 블록은 계속 실행 된다.

 

 

 

3. throws에 대한 설명으로 틀린 것은 무엇입니까?

  1. 생성자나 메소드의 선언 끝 부분에 사용되어 내부에서 발생된 예외를 떠넘긴다.

  2. throws 뒤에는 떠넘겨야 할 예외를 쉼표(,)로 구분해서 기술한다.

  3. 모든 예외를 떠넘기기 위해 간단하게 throws Exception으로 작성할 수 있다.

  4. 새로운 예외를 발생시키기 위해 사용된다.

 

4 : throws 키워드는 메소드 뒤에 정의되며, 특정 유형의 예외가 발생 했을 경우, 호출 한 곳에서 예외 처리를 하도록 

     예외를 전달하는 키워드이다.

 

 

4. throw에 대한 설명으로 틀린 것은 무엇입니까?

  1. 예외를 최초로 발생시키는 코드이다.

  2. 예외를 호출한 곳으로 떠넘기기 위해 메소드 선언부에 작성된다.

  3. throw로 발생된 예외는 일반적으로 생성자나 메소드 선언부에 throws로 떠넘겨진다.

  4. throw 키워드 뒤에는 예외 객체 생성 코드가 온다.

 

4: 컴파일러가 throw문을 만나면, 예외 객체를 자동 생성하여, 예외 객체를 던진다.

    예외객체생성은 따로 new 연산자를 사용하여 생성해주어야한다.

 

 

5. 메소드가 다음과 같이 선언되어 있습니다. 잘못된 예외 처리를 선택하세요.

public void method1() throws NumberFormatException, ClassNotFoundException {....}

 

1. try { method1 (); } catch (Exception e) {}

 

2. void method2 ()  throws Exception {method1 ();}

 

3. try {mdethod1 (); }

   catch (Exception e) { }

   catch (ClassNotFoundException e) { }

 

4. try { method1 (); }

    catch (ClassNotFoundException e) {}

    catch (NumberFormatException e) {}

 

답 3 : 예외를 캐치할 때, 메소드 뒤의 throws 뒤에 오는 예외 유형과 일치해야한다. 정답 3

 

1번 답안은 모든 예외를 일반적인 Exception 유형으로 catch한다. 

2번 답안은 method 1의 호출 용도로 사용한다.

4번 답안은 method 1()의 throw 절에 선언된 특정 예외 유형을 catch하기 때문에 올바른 답안이다.

 

6. 다음 코드가 실행되었을 때 출력 결과를 작성해보세요.

String[] strArray = { "10", "2a" };
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

"숫자로 변환할 수 없음"

0

"인덱스를 초과했음"

 

 

7. login() 메소드에서 존재하지 않는 ID를 입력하면 NotExistIDException을 발생시키고, 잘못된 패스워드를 입력하면 WrongPasswordException을 발생시키려고 한다. 다음 LoginExample의 실행 결과를 보고 빈칸을 채워봅시다.

 

public class NotExistIDException extends Exception {
   public NotExistIDException() {}
   public NotExistIDException(String message) {
          super(message);
       }
  }
  
  public class WrongPasswordException extends Exception {
    public WrongPasswordException() {}
    public WrongPasswordException(String message) { 
          super(message);
     }
  }
  
  public class LoginExample {
      public static void main(String[] args) {
         try {
            login("white", "12345");
          } catch (Exception e) {
            System.out.println(e.getMessage());
          }
          
          try {
           login("blue", "54321");
           } catch (Exception e) {
           System.out.println(e.getMessage());
           }
         }
         
  public static void login(String id, String password) (throw NotExistIDException) {
    // id가 blue가 아니라면 NotExistIDException을 발생시킴
    
    if(!id.equals("blue") {
      throws new NotExistIDException("아이디가 존재하지 않습니다.");
    }
    
    //password가 12345가 아니라면, WrongPasswordException을 발생시킼.
     
     if(!password.equals("12345")) {
       throw new WrongPasswordException("패스워드가 틀립니다.");
       }
     }
   }

 

 

8. FileWriter는 파일을 열고 데이터를 저장하는 클래스입니다. 예외 발생 여부와 상관 없이 마지막에는 close() 메소드를 실행해서 파일을 닫아주려고 합니다. 왼쪽 코드는 try-catch-finally를 이용해서 작성한 코드로, 리소스 자동닫기를 이용하도록 수정하고 싶습니다. 수정한 코드를 작성해보세요.

 

import java.io.IOException;

public class FileWriter implements AutoCloseable {
   public FileWriter(String filePath) throws IOException {
        System.out.println(filePath + " 파일을 엽니다." );
      }
      
    public void write(String data) throws IOexception {
       System.out.println(data +"를 파일에 저장합니다.");
     }
     
    @Override
    public void close() throws IOException {
      System.out.println("파일을 닫습니다.");
     }
   }

 

import java.io.IOException

public class FileWriterExample {
  public static void main(String[] args) {
      try (FileWriter fw = new FileWriter("file.txt") ) {
          fw.write("Java");  // 파일을 열고 데이터를 저장
         } catch (IOException e	) {
             e.printStackTrace();
          }
        }
      }

 

 

 

반응형