본문 바로가기
프로그래밍/Java-문법정리

【Java문법】예외처리

by 코이킹 2022. 1. 10.
반응형

안녕하세요 코이킹입니다. 

 

이번 포스트에서는 예외처리에 대해서 설명해보겠습니다. 

 


1. 예외처리란? 

예외처리는 프로그램 실행 중 예기치 못한 결과가 발생했을 때의 대응을 말합니다. 

 

예를 들어 콘솔에서 사용자 입력으로 '숫자 데이터'를 입력받아야 하는데 '문자열 데이터'를 입력받아, 

문자열 데이터를 숫자 변수에 대입하려 할 경우 프로그램은 예외를 발생시키게 됩니다. 

 

이런 예외의 상황에서 1) 예외발생의 이유를 로그 등으로 알려주거나, 2) 예외가 발생했을 때 필요한 로직을 실행하는 것 등을 예외처리에서 담당합니다. 

 

2. try-catch구문 

try-catch구문은 예외가 발생되리라 예상되거나 반드시 예외 처리를 해줘야하는 코드를 감싸서 예외를 처리합니다. 

예외 발생이 예상되는 곳의 코드를 try구문으로 감싸주고, catch구문에 예외를 처리하는 로직이 위치합니다. 

 

File file = new File("newFile.txt");
//file.createNewFile(); // 파일생성 시에는 예외처리를 하지 않으면 컴파일 에러가 발생
try {
    file.createNewFile(); // 예외가 발생할 가능성이 있는 코드를 try구문으로 감싼다.
} catch (Exception e) {
    e.printStackTrace(); // 실무에서는 StackTrace가 아닌 log4j나 logback에 로그를 남긴다.
}

 

3. 메서드에 throws를 선언하기 

메서드에 throws를 선언해 주면, 메서드 안에서는 따로 try-catch구문을 설정할 필요가 없습니다.

하지만 메서드에 throws를 선언하기만 해서 끝나는 것이 아닙니다. 

throws선언의 의미는 예외처리를 메서드를 호출한 곳에서 처리하라는 의미로 메서드를 호출한 곳에서 try-catch구문으로 예외처리를 해주어야 합니다. 

 

// 메서드에 throws를 붙이면 메서드를 호출한곳에서 예외처리하도록 할 수 있다.
try {
    writeFile(file);
} catch (Exception e) {
    e.printStackTrace();
}

// 호출한 곳에서 처리할 예외 종류는 다중으로 설정이 가능하다. 
// ex) throws IOException, Exception {...
public static void writeFile(File file) throws IOException {
    List<String> list = new ArrayList<String>();
    list.add("ArrayList-String01");  // Index 0 
    list.add("ArrayList-String02");  // Index 1
    list.add("ArrayList-String03");  // Index 2
		
    BufferedWriter wr = null;
    wr = new BufferedWriter(new FileWriter(file, true));
    for (String var : list) {
        wr.append(var);
        wr.append("\n");
    }
    wr.flush();

    if (wr != null) {
        wr.close();
        wr = null;
    }
}

 

4. throw로 예외를 발생시키기 

throw를 사용하면 일부러 예외를 발생시킬 수가 있습니다. 

try {
    if (file.exists()) {
        System.out.println(file.getCanonicalPath());
        throw new Exception("file exist!!");
    }
} catch (Exception e) {
    e.printStackTrace();
    System.out.println("file delete!!");
    file.delete();
}

 


※ 예제코드

https://github.com/leeyoungseung/algorithmBasic/blob/master/algorithm/src/basic/B_14_Exception.java

 

※ qiita에 투고한 URL

https://qiita.com/Koiking-L/items/fdd816f03c3d82d9b8a2

반응형

댓글