안녕하세요! 쏘코입니다.

오늘은 지난 시간에 이어서 계속해서 예외처리에 대해서 공부하도록 하겠습니다.

 

목차


    0. e의 비밀

    Exception e 에서 Exception변수의 데이터형이 되고, e변수입니다.

    e는 마음껏 바꿔서 사용하셔도 무방합니다만 일반적으로 e를 사용합니다.

     

    우리가 지금까지 예외처리를 해주면서 발생하는 예외의 데이터형은 알았지만, 그 예외 안에 어떤 데이터가 들어있는지에 대해서는 신경을 쓴 적이 없었죠?

     

    Exception도 클래스이기 때문에 메소드들이 존재합니다.

    만약 어떤 에러가 떴는지를 예외메시지가 아니라 정상적으로 콘솔창에 띄우고 싶다면 

    e.getMessage();

    를 출력하면 됩니다.

     

     

    예외가 발생했을 때 예외처리가 되어있지 않으면 빨간색 예외 메시지를 띄우면서 그 자리에서 프로그램이 멈춘다고 했었죠?

    하지만 예외처리가 되어있다면 멈추지 않고 끝까지 실행됩니다.

    만약 예외처리가 되면서도 예외 메시지를 확인하고 싶다면

    e.printStackTrace()

    를 사용하면 예외처리를 정상적으로 하고 나서 예외 메시지를 추가로 띄울 수 있습니다.

     

    하지만 사용자에게 에러메시지를 보여주는 것은 보안에 있어서 치명적인 피해가 있을 수 있기 때문에 따로 보안 요소를 추가하여 관계자만 확인할 수 있도록 만들어주는 것이 좋습니다. (logging 시스템을 찾아보시면 도움이 됩니다!)

     

     

    public class ExceptionApp {
    
    	public static void main(String[] args) {
    		
    		
    		
    		int[] scores = {10, 20, 30};
    		System.out.println(1);
    		try {
    			System.out.println(2);
    //			System.out.println(scores[3]);
    			System.out.println(3);
    			System.out.println(2/0);
    			System.out.println(4);
    		} catch(ArithmeticException e) {
    			System.out.println("계산이 잘못된 것 같아요."+e.getMessage());
    			e.printStackTrace();
    		} catch(Exception e) {
    			System.out.println("뭔가 이상합니다. 오류가 발생했습니다!!");
    		}
    		System.out.println(5);
    
    	}
    
    }

     


    1. checked vs unchecked exception

    error와 exception의 차이를 알아봤던 것처럼,

    예외에도 checkedunchecked가 존재합니다.

     

    checked exception예외처리가 되어있지 않으면 아예 컴파일이 되지 않는 예외입니다.

    ex) Exception에서 RuntimeException을 제외한 친구들

    unchecked exception예외처리가 재량인 예외입니다.

    ex) RuntimeException을 포함한 그 자식들

     

    아래 사진을 보면 좀 더 이해가 쉬울 수 있습니다.

    unchecked exception의 예시인 RuntimeException의 자식에는 우리가 아까 확인한 IndexOutOfBoundsException과 ArithmeticException이 있습니다.

    프로그램이 돌아가다가 실행시간에 예외 메시지가 발생했죠?

    반면 checked exception은 아예 컴파일 자체가 되지 않기 때문에 예외처리가 되어있지 않으면 한 줄도 돌아가지 않습니다.

     

    출처 : https://itblackbelt.wordpress.com/2015/02/17/checked-vs-unchecked-exception-in-java-example/

     

    실제 코드를 통해 더 확실하게 이해해봅시다.

    CheckedExceptionApp 클래스를 만들어줍니다.

    그리고 FileWriter 클래스를 이용해 인스턴스를 만들고, data.text라는 파일에 "Hello"를 작성하고 파일을 close했습니다.

    그런데 빨간 밑줄이 뜨죠?

     

     

    IOException을 처리하지 않았다는 말이 뜹니다.

    IOException은 checked exception이기 때문에 처리를 하지 않으면 프로그램이 실행되지 않습니다.

     

     

    이제 try catch문을 이용해서 예외처리를 해봅시다.

    (TMI : try catch문의 경우는 throw문으로 대체할 수도 있습니다!)

    빨간 줄이 지워졌죠?

    그렇다는 말은 컴파일이 가능하다는 이야기가 됩니다.

     

    정상적으로 생성된 모습

     

    import java.io.FileWriter;
    import java.io.IOException;
    
    public class CheckedExceptionApp {
    
    	public static void main(String[] args) {
    		try {
    			FileWriter f = new FileWriter("data.text");
    			f.write("Hello");
    			f.close();
    		} catch(IOException e) {
    			e.printStackTrace();
    		}
    		
    
    	}
    
    }

     


    오늘은 Exception 데이터인 e와 checked / unchecked exception에 대한 차이에 대해서 알아봤습니다.

    무심코 사용하지만 설명하라고 하면 쉽게 설명하기 어려운 부분이기 때문에 알고 있으면 언젠가 유용하게 쓰일 수 있을 것이라고 생각합니다!!

     

    그렇다면 다음 포스팅에서 뵙겠습니다!

    오늘도 읽어주셔서 감사합니다 :)

     

    반응형
    • 네이버 블로그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기