ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 예외처리
    컴퓨터/Java 2019. 9. 4. 17:59

    출처 : 자바프로그래밍 입문 강좌(인프런)

     

    - 프로그램에 문제가 발생했을 때 시스템 동작에 문제가 없도록 사전에 예방하는 코드

     

    - cf) 컴파일 언어의 장점

    컴파일이라는 불필요한 과정을 거쳐야 하지만 장점이 있다.

    컴파일 과정에서 발견되는 오류는 미리 디버깅 할 수 있다는 것!

    컴파일에서 발견되지 않는 오류는...

     

    - 예외란

    프로그램에 문제가 있는 것

     

    - Exception vs Error

    Exception: 개발자가 대처할 수 있음, 코딩 상의 문제가 있는 경우(0으로 나눌 때 등)

       Checked Exception : '예외처리'를 반드시 해야하는 경우(네트워크, 파일시스템 등)

       Unchecked Exception : 예외처리를 개발자의 판단에 맡기는 경우(데이터 오류 등), 혹시나 하는 마음에 자발적으로 예외처리 하는 경우

    Error : 메모리가 부족하다든가 JVM에 문제가 있다든가, power가 나갔다든가 등 장애 요소가 생겼을 때 등 개발자가 대처할 수 없을 때

     

    - 예외처리

    예외로 인해 시스템 동작이 멈추는 것을 막는 것

     

    - Exception 클래스

    하위 클래스로 1) NullPointerException : 객체를 가리키지 않고 있는 레퍼런스를 이용할 때

    2) ArrayIndexOutOfBoundException : 배열에서 존재하지 않는 인덱스를 가리킬 때

    3) NumberFormatException : 숫자데이터에 문자데이터 등을 넣었을 때

    가 있다.

     

    - try ~ catch

    미리 예측하고 방어 코드를 작성한다.

    try {
    	예외가 발생할 수 있는 코드
    } catch (Exception e) {
    	예외가 발생했을 때 처리할 코드
    }
    int i=10;
    int j = 0;
    int r= 0;
    
    System.out.println("Exception BEFORE");
    
    try {
        r = i / j;
    } catch (Exception e) {
        e.printStackTrace();
        String msg = e.getMessage();
        System.out.println("Exception: " + msg);
    }
    
    System.out.println("Exception AFTER");

    Exception의 메소드 : 

    printStackTrace - error가 어떤 것이 발생했는지 콘솔 창에 보여준다,

    ex. ava.lang.ArithmeticException: / by zero
    at lec11Pjt001.MainClass.main(MainClass.java:12)

    없으면 Exception BEFORE와 Exception AFTER만 뜬다.

    getMessage() : 예외를 간략하게 보여준다.

    ex. / by zero

     

    - 다양한 예외처리

    - finally

    어떠한 예외가 발생하더라도 반드시 실행되어야 하는 코드

    package lec11Pjt001;
    
    import java.util.ArrayList;
    import java.util.InputMismatchException;
    import java.util.Scanner;
    
    public class MainClass {
    	public static void main(String[] args) {
    		
    		Scanner scanner = new Scanner(System.in);
    		int i,j;
    		ArrayList<String>list = null;
    		
    		int[] iArr = {0,1,2,3,4};
    		
    		System.out.println("Exception BEFORE");
    		
    		// try안에서 예외가 발생하면 아래에 있는 코드를 실행하지 않고 catch로 넘어간다
    		try {
    			System.out.println("input i : ");
    			i = scanner.nextInt(); // 사용자로부터 정수를 받아야 한다. 문자를 받으면 InputMismatchException으로 넘어간다
    			System.out.println("input j : ");
    			j = scanner.nextInt();
    			
    			System.out.println("i / j = " + (i / j));
    			
    			for (int k=0; k<5; k++) {
    				System.out.println("iArr[" + k + "] : " + iArr[k]);
    			}
    			System.out.println("list.size() : " + list.size());
    			
    		} catch(InputMismatchException e) {
    			e.printStackTrace();
    		} catch(ArrayIndexOutOfBoundsException e) {
    			e.printStackTrace();
    		} catch(Exception e) {
    			e.printStackTrace();
    		} finally {
    			System.out.println("예외 발생 여부에 상관없이 언제나 실행 됩니다.");
    			// 반드시 실행되어야 하는 코드, 예를 들어 네트워크를 끊는 작업
    		}
    		
    		System.out.println("Exception AFTER");
    	}
    }

     

    - throws

    : 예외가 발생한 지점에서 예외처리를 하지 않고 상위로 올려버린다.(던져버린다)

    예외 발생시 예외 처리를 직접 하지 않고 호출한 곳으로 넘긴다.

    예외를 내가 처리할 것인지 돌려버릴 것인지 결정해야 한다.

     

    - runtime exception : compile 단계에서 이루어지지 않는다

     

    - throw error 예시

    throw new AssertionError("알 수 없는 연산 : " + this);

    throw new EmptyStackException();

    ClassCastException : runtime exception 중 하나

    '컴퓨터 > Java' 카테고리의 다른 글

    특수 문자와 서식 문자  (0) 2019.09.04
    입력과 출력  (0) 2019.09.04
    람다식  (0) 2019.09.04
    클래스 05: 추상클래스  (0) 2019.09.04
    클래스 04: 인터페이스  (0) 2019.09.04

    댓글

Designed by Tistory.