안녕하세요 코이킹입니다.
이번 포스트에서는 예외처리에 대해서 설명해보겠습니다.
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
'프로그래밍 > Java-문법정리' 카테고리의 다른 글
【OOP】02_멤버변수·메서드·생성자 (0) | 2022.01.15 |
---|---|
【OOP】01_객체・클래스・인스턴스 (0) | 2022.01.10 |
【Java문법】셋(Set) (0) | 2022.01.10 |
【Java문법】맵(Map) (0) | 2022.01.10 |
【Java문법】리스트(List) (0) | 2022.01.10 |
댓글