ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [자바기초] 예외 처리(Exception) 정리노트
    º Language º/Java 2023. 4. 6. 22:39

    * 예외 처리 ?

     

    - 예외 : 프로그램 실행 중 사용자의 부주의 등으로 인해 발생하는 예기치 않는 오류 상황을 말합니다.

                  즉,  이것을 처리하는 것을 예외처리라고 합니다. 

     

    - 자바는 기본적으로 발생할만한 예외들에 대하여 클래스를 만들어 두었습니다.

      그래서 그 상황이 되면 자동으로 예외 객체가 생성됩니다.  우리는 그 이외의 예외 객체를 잡아서 처리해주면 됩니다.

     

     

    public void 메소드명(){
     	try{
     		예외가 발생할만한 문장(들)
     	}catch(예외 자료형 변수명){
     		예외처리 시 노출시킬 문장(들)
     	}
     }

    > 기본적으로  try{ } catch( ){ }를 활용하여 예외 처리를 합니다.

     

     

     

    * 예외 처리 방법 (2가지)

     

     

    1. 메소드 안에서 직접 try{ } catch( ){ } 하여 직접 처리하는 방법

     

    class DivTest {
    	int a = 4;
    	int b = 2;
    	public static void div(int a, int b) {		
            try{			//메소드 안에서 예외 처리.
    		int r = a/b;
            System.out.println(r);
    		}catch(Exception e){			
            System.out.println("예외 발생 : "+ e.getMessage());
    		}
    	}
    	public static void main(String[] args) {
    		new DivTest();
    		
    	}
    }

    > try 안에 예외가 발생할만한 문장을 넣고,  catch 에서 예외 처리 시 노출 시킬 문장들을 작성하여 메소드 안에서 예외를 바로 처리할 수 있습니다.

     

     

     

     

    2. 메소드 선언문 (메소드 이름 뒤에) 써주며 예외처리를 메소드 호출쪽으로 throws하여 예외를 전파하는 방법

     

    class DivTest {
    	public static void div(int a, int b) throws ArithmeticException{
    		int r = a/b;
    		System.out.println(r);
    	}
    	public static void main(String[] args) {
    		int a = 4;
    		int b = 2;
    		try{
    		div(a,b);
    		}catch(Exception e){
    			System.out.println("예외 발생 : "+ e.getMessage());
    		}
    	}
    }

    > 메소드 선언문에 보면 ArithmeticException 을 throws 하여 메인에 호출 되어 예외처리를 한 것을 확인할 수 있습니다.

    > 아래의 .getMessage()는 자동으로 오류 메세지를 나타내주는 메서드입니다.

     

     

     

    * 여러 예외 처리 시  처리순서

    class DivTest {
    	public static void div(int a, int b) {
                try{
                int r = a/b;
                System.out.println(r);
    		}catch(ArithmeticException e) {	
           -> 작은 예외 먼저와야 기능을 함.
           
                 System.out.println("예외 발생 : "+ e.getMessage());
                }catch(Exception e){			
                -> exception이 높은 클래스 이므로 뒤에와야 함.
    
                System.out.println("예외 발생 : "+ e.getMessage());
          	  }
    		
    	}
    	public static void main(String[] args) {
    		int a = 4;
    		int b = 2;
    		
    	}
    }

    > 하나의 try 안에 여러가지 catch 절이 올수도 있어요.

    이때 범위가 작은 예외종류가 Exception과 같은 큰 예외종류보다 먼저 와야 합니다.

     

     

     

    * RunTimeException

     
     - RunTimeException의 후손들은 사용자가 따로 예외처리를 하지 않아도  자바가 알아서 예외처리를 해주기 때문에 컴파일이 됩니다. 그러나 RunTimeException의 후손이 아닌 예외들은 사용자가 반드시 꼭 예외처리를 해주어야 컴파일 됩니다.

     

    * 대부분 예외를 포함하고 있는 패키지

     

    1. java.io     ->     파일입출력
    2. java.net   ->     네트워크통신
    3. java.sql   ->      데이터베이스연결

     

     

     

    *  finally 
      
      원래 기본적으로 예외가 발생되면 문제가 발생 된 것이기 때문에 해당 catch 절을 수행하고 해당 프로그램이 종료됩니다.
      
      근데 예외가 발생을 하거나 발생하지 않거나 상관없이 모든 상황에서 반드시 동작시켜야 할 명령이 있다면 finally에 써줍니다.
      

     try{
       예외가 발생할 만한 명령(들)
      
      }catch(예외클래스명1 변수명1){
      
      }catch(예외클래스명2 변수명2){
      
      }catch(예외클래스명3 변수명3){
      
      }finally{
      
      }

    > finally 기본 코드입니다.

     

     

    * 사용자 정의 예외

     

    자바는 대부분의 예외에 대하여 이미 클래스가 만들어져 있어요.
    그러나 만약 내가 지금 하고 있는 프로그램에서 특정한 상황을 예외로 만들고자 한다면,

     

    '사용자 정의 예외' 를 만들 수 있어요.  그 때 사용하는 키워드는 throw입니다.

     class 예외클래스이름 extends Exception{
     	public 예외클래스이름(String msg){
     		super(msg);
     	}
     }
     
    try{ 
     if(예외의 상황인가?){
     	throw new 예외클래스명(msg);
     }
     }catch(예외클래스명 변수명){
     
     }

    > 사용자 정의 예외를 위한 기본 코드입니다.

      1. 예외처리 클래스를 새로 만듭니다.

      2. 클래스 이름을 예외 클래스 이름으로 지정한 후 extends Exception 하여 상속 받습니다.

      3. 예외 처리를 위해 try catch 를 이용하고, try 안에 if( 사용자 조건) { throw new ~;}를 해주면 됩니다.

     


    + 차이점 짚고가기 !

    throws 는 예외처리를 메소드에서 메인 호출로 전파하는 것 < - > throw는 강제로 예외를 발생시키는 것

     

     

    ex)  두 수를 입력받아 두 수의 조화평균을 구하는 프로그램을 만들고 싶어요.

    조화 평균의 공식 :  2ab/a+b
     만약 ab의 절댓값이 같고 부호만 다르다면 두 수의 조합 평균은 있을 수가  없잖아요?(3+-3=0이 되어어버리니까)

    그러나 이 상황은 자바가 알수 없어요.  그렇게 때문에 그 상황을 강제로 사용자 정의 예외 처리를 해야해요.

     

     

Coder yein