[JAVA] Exception - 2

Coastby·2022년 8월 9일
0

JAVA

목록 보기
23/33

예외-2

○ throws

이클립스에서 키워드 더블클릭 - 콘솔창 옆에 뜨는 Javadoc을 확인하면 자바문서를 바로 확인할 수 있다. 그 중 Throws라는 항목이 있다. 이는 반드시 처리가 필요한 예외를 보여준다. (java에서도 API를 만들면서 예외를 던진 것이다)

FileReader 메소드에서는 FileNotFoundException 예외를, readLine 메소드에서는 IOException 예외가 throw되는 것을 확인할 수 있다. 그리고 이 예외들을 처리하지 않으면 이클립스에서는 지속적으로 오류 표시가 나타난다.

예외가 있는 메소드들을 직접 사용하는 메소드에서 예외 처리를 하면 아래와 같다. 하지만 위의 예외들은 파일이 없거나 입출력의 문제이므로 사용자가 이를 알고 해결을 해야한다. 따라서 예외 처리를 엔드유저인 애플리케이션의 사용자가 해결을 할 수 있기 때문에 애플리케이션의 진입점인 메소드 main으로 책임을 넘긴다. 이때 throws를 사용하게 된다.

import java.io.*;
class B{
    void run(){
        BufferedReader bReader = null;
        String input = null;
        try {
            bReader = new BufferedReader(new FileReader("out.txt"));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        try{
            input = bReader.readLine();
        } catch (IOException e){
            e.printStackTrace();
        }       
        System.out.println(input); 
    }
}
class C{
    void run(){
        B b = new B();
        b.run();
    }
}
public class ThrowExceptionDemo {
    public static void main(String[] args) {
         C c = new C();
         c.run();
    }   
}

위와 같이 class B에서 예외를 처리할 수 있지만 다음 사용자에게 예외를 넘길 수 있다.

import java.io.*;
class B{
    void run() throws IOException, FileNotFoundException{
        BufferedReader bReader = null;
        String input = null;
        bReader = new BufferedReader(new FileReader("out.txt"));
        input = bReader.readLine();
        System.out.println(input);
    }
}
class C{
    void run(){
        B b = new B();
        try {
            b.run();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class ThrowExceptionDemo {
    public static void main(String[] args) {
         C c = new C();
         c.run();
    }   
}

한번더 main 메소드로 넘겨준다.

import java.io.*;
class B{
    void run() throws IOException, FileNotFoundException{
        BufferedReader bReader = null;
        String input = null;
        bReader = new BufferedReader(new FileReader("out.txt"));
        input = bReader.readLine();
        System.out.println(input);
    }
}
class C{
    void run() throws IOException, FileNotFoundException{
        B b = new B();
        b.run();
    }
}
public class ThrowExceptionDemo {
    public static void main(String[] args) {
         C c = new C();
         try {
            c.run();
        } catch (FileNotFoundException e) {
            System.out.println("out.txt 파일은 설정 파일 입니다. 이 파일이 프로잭트 루트 디렉토리에 존재해야 합니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }   
}
profile
훈이야 화이팅

0개의 댓글