Java/혼자 공부하는 자바

[혼공자] 6주차_Chapter 10~11

예린lynn 2024. 2. 12. 19:58
728x90

√ 미션

1. 기본 미션 : p. 439 09-2 확인 문제 2번 문제 풀고 과정 설명하기

 

  2번. AnonymousExample 클래스의 실행결과를 보고 Vehicle 인터페이스의 익명 구현 객체를 이용해서 필드, 로컬 변수의 초기값과 메소드의 매개값을 대입해보세요.

 

답: 

public class Anonymous {

  Vehicle field = new Vehicle() {
    @Override
    public void run() {
     System.out.println("자전거가 달립니다.");
    }
  };
  
  void method1() {
    Vehicle localVar = new Vehicle() {
      @Override
    public void run() {
     System.out.println("승용차가 달립니다.");
    }
  };
  localVar.run();
  }
  
  void method2(Vehicle v){
    v.run();
  }
}
public class AnonymousExample {
  public static void main(String[] args){
   Anonymous anony = new Anonymous();
   
   annoy.field.run();
   annoy.method1();
   
   annoy.method2(
    new Vehicle() {
      @Override
    public void run() {
     System.out.println("트럭이 달립니다.");
    }
  }
  );
  }
}

 

2. 선택 미션 : java.lang 패키지에 속하는 주요 클래스와 용도를 정리해서 포스팅하기


Chapter 10 : 예외 처리

1 . 예외 클래스

예외(exception)란 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 인해 발생하는 프로그램 오류이다. 자바에서는 예외를 클래스로 관리하며, JVM은 프로그램을 실행하는 도중에 예외가 발생하면 해당 예외 클래스로 객체를 생성한다. 이때 모든 예외 클래스는 java.lang.Exception 클래스를 상속받는다.

  • 일반 예외 : 프로그램 실행 시 예외가 발생할 가능성이 높기 때문에 예외 처리 코드가 있는지 검사한다.
  • 실행 예외 : 실행 시 예측할 수 없이 갑자기 발생하기 때문에 예외 처리 코드가 있는지 검사하지 않는다.

실행 예외는 오로지 개발자의 경험에 의해서 예외 처리 코드를 작성해야 한다. 대표적인 실행 예외는 다음과 같다.

 

1) NullPointerException

객체가 없는 상태(null)에서 객체를 사용하려고 할 때 발생하는 예외이다. 자바 프로그램에서 가장 빈번하게 발생하는 예외이다.

public class NullPointerExceptionExample {
  public static void main(String[] args){
    String data = null;
    System.out.println(data.toString());
  }
}

 

2) ArrayIndexOutOfBoundsException

배열에서 인덱스 범위를 초과할 경우 발생하는 예외이다.

다음은 2개의 실행 매개값을 주지 않았기 때문에 args[0], args[1]과 같이 인덱스를 사용할 수 없어서 발생한다.

public class ArrayIndexOutOfBoundsExceptionExample {
  public static void main(String[] args){
    String data1 = args[0];
    String data2 = args[1];
    
    System.out.println("args[0]: "+data1);
    System.out.println("args[1]: "+data2);
    }
}

 

3) NumberFormatException

문자열로 되어 있는 데이터를 숫자로 변경하는 경우가 있다. 이때 문자열에 숫자로 변환될 수 없는 문자가 포함되어 있을 경우 예외가 발생한다.

public class NumberFormatExceptionExample {
  public static void main(String[] args) {
    String data1 = "100";
    String data2 = "a100";
    
    int value1 = Integer.parseInt(data1);
    int value2 = Integer.parseInt(data2); // 예외 발생
  }
}

 

4) ClassCastException

타입 변환은 상위 클래스와 하위 클래스 간에 발생하고, 구현 클래스와 인터페이스 간에 발생한다. 이때 잘못된 타입 변환이 일어나면 예외가 발생한다.

 

2 . 예외 처리

try-catch-finally 블록은 생성자 내부와 메소드 내부에서 작성되어 예외가 발생할 경우 예외 처리를 할 수 있도록 한다.

 

예외의 종류에 따라 예외 처리 코드를 다르게 작성할 수 있다.

 

1) 다중 catch

try 블록 내부에는 다양한 예외가 발생할 수 있는데, 발생하는 예외별로 예외 처리 코드를 다르게 작성해야 한다. 이때 catch 블록이 여러 개라 할지라도 단 하나의 catch 블록만 실행된다. 또한 상위 예외 클래스가 하위 예외 클래스보다 아래쪽에 위치해야 한다.

 

2) 예외 떠넘기기

메소드 내부에서 예외가 발생할 경우 throws 키워드를 사용하여 메소드를 호출한 곳으로 예외를 떠넘길 수 있다.

리턴타입 메소드이름(매개변수,...) throws 예외클래스1, 예외클래스2, ... {
}

리턴타입 메소드이름(매개변수,...) throws Exception {
}

 

throws 키워드가 붙어 있는 메소드는 반드시 try 블록 내에서 호출되어야 한다. 또한 catch 블록에서 떠넘겨 받은 예외를 처리해야 한다.

 

 

 

728x90