예외처리

서현서현·2023년 8월 6일
0

JAVA

목록 보기
27/27

자바에서 예외는 두가지로 분류된다

  • CheckedException : 예외에 대한 대체코드가 없으면 컴파일 진행X
  • UncheckedException : 예외에 대한 대처코드 없더라도 컴파일 진행

CheckedException

  • SQLException
  • IOException
    - FileNotFoundException

UncheckedException

  • NullPointerException
  • ArrayIndexOutOfBoundException
  • ArithmeticException
  • IllegalArgumentException

에러 핸들링

: try-catch문을 활용하여 에러를 핸들링한다.

try블록에서 예외가 발생하면 JVM이 해당 Exception 클래스의 객체를 생성한 후 던진다.(throw) 그리고 던져진 예외를 처리할 수 있는 catch블록에서 이를 받아 처리한다. 만약 없다면 예외처리에 실패한다. 정상적으로 처리되면 try-catch블록을 벗어나고 다음문장을 실행하게 된다.

Throws의 활용

메소드에서 처리해야할 하나 이상의 예외를 호출한 곳으로 전달한다.
예외가 없어지는것이 아닌 단순 전달이다. 따라서 전달받은 메소드는 예외처리 책임이 발생한다.
(CF) 메소드를 재정의할때, 즉 ClassNotFoundException을 thorws하는 메소드를 가지는 Parent를 상속받아 재정의하는 메소드는 ClassNotFound보다 큰 메소드로 해당 메소드를 재정의 할 수 없다.

예제

에러핸들링 방법은 예제로 이해하는게 편하다!
checkedException의 경우엔 Exception을, uncheckedException의 경우엔 RuntimeException 클래스를 상속받는것에 유의한다.

  1. 예외클래스를 만들어 체크드, 언체크드 구분하여 extends를 해주고
  2. 오류를 발생시키는 메소드에서 throw new에러클래스();를 작성한다. 메소드명에 throws를 작성해줘야 하는데, checkedException만 작성하면 된다.
  3. 위 메소드(예외를 발생시킬 수 있는 메소드)를 사용할땐 해당 메소드를 try-catch로 감싸주고 사용한다.
// 잘못된 동물이름 입력이 들어올경우 처리해주는 핸들러
public class AnimalNotFoundException extends Exception {
	public AnimalNotFoundException(String name){
    	//예외메세지
        super(name+"에 해당하는 동물은 존재하지 않습니다.");
    }
}

public class Test{
	private static String[] Animals = {"고양이","강아지","판다"};
    
    public static void main(String[] args){
    	try{
        	getAnimal("강아지");
            getAnimal("푸바오");
        } catch(AnimalNotFoundException e){
        	e.printStackTrace(); //AnimalNotFoundException
        }
    }
    
    private static void getAnimal(String name) throws AnimalNotFoundException {
    	for(int i=0; i<animals.length; i++){
        	if(animals[i]!=null && animals[i].equals(name)){
            	//..
                return;
            }
        }
        
        throw new AnimalNotFoundException(name); //만약 uncheckedExcpetion이었다면 throws엔 아무것도 작성하지 않아도됨
    }
    
}

0개의 댓글