본문 바로가기

Developer/Java-oop

#025. Exception (예외처리) 알아보기...

#025. Exception (예외처리) 알아보기...

 

1. Exception (예외처리) 을 알아보기 전에 Error(오류)에 대해서 먼저 알아보자.

Java 만이 아니라 program 에서 오류의 종류는 두 가지가 있다. 컴파일 중 오류와 런타임 중 오류로 나눠진다. 컴파일 중 오류는 컴파일러가 문법오류 등을 체크해준다. 런타임 중 오류는 100% 개발자가 코딩을 잘못해서 나오는 오류를 말한다.

 

테스트를 위해 io 패키지를 만들고, ExceptionDemo 클래스 파일을 만들어 보자.

 

1) 컴파일 중 오류 : 문법 오류 등을 체크함.

코드

package io;

 

public class ExceptionDemo {

    public static void main(String[] args) {

        // 컴파일 중 오류

        int i = "김동혁";        

    }

}

설명

문장6: 정수형 변수 i 에 문자열을 집어 넣으려고 하니 빨간색 밑줄이 그어지며, 컴파일이 안된다.

 

2) 런타임 중 오류 : 100% 개발자 실수.

코드

package io;

 

public class ExceptionDemo {

    public static void main(String[] args) {

        // 컴파일 중 오류

        // int i = "김동혁";        

 

        // 런타임 중 오류

        Integer[] ii = new Integer[5];

        ii[-1] = 100;

    }

}

설명

문장9: wrapper class Integer 로 배열 5개짜리 객체 ii 를 생성했다.

문장10: array index 에 -(음수)가 오면 컴파일 중엔 알 수가 없으며, 런타임(실행)중에 오류를 발생한다.

Console 창을 보면 ArrayIndexOutOfBoundsException 이 발생 되는 것을 확인 할 수 있다.

 

2. 이제 Exception (예외처리) 에 대해서 알아보자.

Exception 은 checked Exception 과 unchecked Exception 이 존재를 한다.

 

1) checked Exception 은 대표적인 클래스로 IO로 예를 들어보자. IO는 Input / Output 의 약자로 입출력을 말한다. File 처리할 때, Network 처리할 때, 역시 IO 클래스를 사용한다.

Network으로 채팅을 하고 있을 때, 인터넷이 끊기거나 하면, 프로그램이 오류를 발생하고 종료된다. 또한, 파일의 내용을 확인하려 할 때, 경로가 잘못되어 접근할 수 없을 경우 역시 오류를 발생하고 프로그램이 종료된다. 그렇기 때문에 IO는 exception 을 필히 입력해야 한다. 입력하지 않는다면, 컴파일러가 컴파일을 하지 않고 빨간색 밑줄이 그어 질것이다.

 

2) unchecked Exception 은 본문1-2)에서 봤듯이 Array 의 index가 잘못 되었을 때, 예외처리를 해줘야 한다. 개발자의 실수 이고, 발생하지 않아야 하는 곳에서 발생되기 때문에 컴파일러가 신경을 쓰지는 않는다. 이런 경우는 개발자가 신경을 써서 예외처리를 해야 한다.

 

1) checked Exception : 컴파일러가 예외처리를 알려준다..

코드

package io;

import java.io.FileInputStream;

public class ExceptionDemo {

    public static void main(String[] args) {

        FileInputStream fis = new FileInputStream("C:/Hello.java");

    }

}

설명

문장2: FileInputStream 을 사용하려면 java.io.FileInputStrem 를 추가해야 한다.

문장7: C:/Hello.java 파일이 존재하지 않을 수 있기 때문에 컴파일러가 예외처리를 알려준다.

 

2) checked Exception : 예외처리 방법..

코드

package io;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

public class ExceptionDemo {

    public static void main(String[] args) {

        try {

            FileInputStream fis = new FileInputStream("C:/Hello.java");

        } catch (FileNotFoundException e) {

            System.out.println(e.getMessage());

        }

    }

}

결과

C:\Hello.java (지정된 파일을 찾을 수 없습니다)

설명

문장3: FileNotFoundException 을 사용하기 위해서는 문장3을 작성해야 한다.

문장6~10: 예외처리 하는 방법이다. try { 구현 } catch (예외종류) { 오류발생시내용 } 으로 사용을 한다.

문장9: 오류 내용을 출력하고 있다.

결과는 JVM 이 런타임 중에 이미 지정된 해당 오류 내용을 보여주고 있다.

 

3) unchecked Exception : 예외처리 방법..

코드

package io;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

public class ExceptionDemo {

    public static void main(String[] args) {

        try {

            FileInputStream fis = new FileInputStream("C:/Hello.java");

        } catch (FileNotFoundException e) {

            System.out.println(e.getMessage());

        }

        try {

            Integer[] ii = new Integer[5];

            ii[-1] = 100;

        } catch (Exception e) {

            System.out.println(e.getMessage());

        }

    }

}

결과

C:\Hello.java (지정된 파일을 찾을 수 없습니다)

-1

설명

문장11~16: 내용만 추가 되었다. 본문1-2)에서 봤던 런타임 오류 시에 개발자가 임의로 예외를 처리 하는 모습이다.

결과를 보면 -1 이라고 내용이 출력되고 본문1-2)에서의 결과와는 다른 모습으로 보이는 것을 알 수가 있다.

 

프로그램에서 예외처리를 하지 않으면, 프로그램이 에러를 발생하고 종료를 하게 된다. unchecked Exception 은 개발자가 신경 써서 수를 줄이면 좋겠고, checked Excption 은 컴파일러가 알려주면 작성하면 되겠다.

 

다음시간엔 oop 의 마지막 I/O Stream 에 대해서 알아보겠다..

 

잡담. 오늘 알아본 exception 은 내용이 긴데.. 설명은 간단하네요^^; 오늘도 화이팅!!