[Java] 예외 처리 (try-catch와 throws)

Q0. 개요

프로세스 실행 중 여러 가지 에러(시스템/로직/DB 등)가 발생하는 경우를 위해 예외 처리라는 것이 존재한다.

예외 처리에는 try ~ catch 또는 throw를 사용하거나, throws 클래스를 상속받는 3가지 방법이 있다.

예외 처리는 에러가 발생하여 시스템이 중단되는 현상을 방지하기 위해 사용한다.

예외 처리는 어떻게 선언하고 메세지를 뿌릴지만 알아도 된다.

 

Q1. try ~ catch문

기본적인 구조 try ~ catch ~ finally구문을 로직에 감싸는 형태로 사용된다. (자바에서 에러발생시 뱉어냄)

public void test(){
	int num1;
	int num2;
	try{
		/* 예외처리를 지정할 코드영역 (메서드 전체로 잡거나 일부만 지정할 수 있다)
		오류가 존재하는 경우 catch가 실행되며 오류가 없는 경우 catch는 실행되지 않는다 
		사용할 변수는 try~catch문 밖에서 선언해야지 예외처리가 종료된 이후에도 변수를 사용할 수 있다
		*/        
		num1 = 0;
		num2 = 10;
		System.out.println(num1 / num2);

	}catch(Exception e){
		/* catch와 finally는 둘 중 하나는 생략이 가능하지만, 둘 다 생략은 불가능하다.
		e.getMessage()는 에러의 원인을 간단하게 출력한다.
		e.toString()는 에러의 Exception내용과 원인을 출력한다.
		e.printStackTrace()는 에러의 발생근원지를 찾아서 단계별로 에러를 출력한다.
        */  
        e.printStackTrace();
	
    }finally{
    	/* finally를 작성 시 에러발생여부와 상관없이 무조건 실행되는 구문입니다*/      
    }
}

Q2. throw구문

try ~ catch 구문안에서 사용한다. 자바에서 에러가 발생하기 전에, 사전에 커스텀으로 에러를 뱉도록 설정한다.

public void test(){
	int num1;
	int num2;
	try{
		num1 = 0;
		num2 = 10;
		if(num1 == 0 || num2 == 0){
			/*내부Exception를 이용하거나 
			별도로 커스텀한 예외클래스notZeroCalcException를 만들어 사용한다*/
			throw new notZeroCalcException();
			//throw new Exception(); 
		}
		System.out.println(num1 / num2);

	}catch(notZeroCalcException e){
		e.printStackTrace();
        
	}catch(Exception e){
		e.printStackTrace();    
	}
}

Q3. throws상속

해당 메서드에 예외클래스를 상속받아서, 예외 처리 한다. (단, 상속 관계의 메서드는 throws가 모두 작성되어 있어야 한다)

public void test() throws Exception{ //Exception클래스 또는 커스텀예외클래스를 상속받아서 사용한다
	int num1;
	int num2;
	try{
		num1 = 0;
		num2 = 10;
		System.out.println(num1 / num2);
        
	}catch(Exception e){
		e.printStackTrace();    
	}
}

 

Q4. 결론적으로

3가지 예외 처리 방법 중에 원하는 방법을 선택하여 사용하면 된다. 기능적인 차이점은 없기에 각자의 코드 가독성과 입맛에 맞게 선택하면 된다.개발을 하다보면 자주 발생되는 에러나 파일 업로드 등 관련하여 예외 처리를 자주 사용할 것이다.앞으로 서비스에 문제 되지 않는 클린 코드를 위해서 꼭 필요한 기능이다.