Java - Exception
예외 처리
(기초 자바 강의에서 넘어간…)
예외 (Exception) :사용자의 잘못된 조작, 개발자의 잘못된 코딩으로 인한 오류 예외가 발생되면 프로그램이 바로 종료되지만 예외 처리를 추가하면 정상 실행 상태로 돌아갈 수 있다.
- 컴파일 오류 (Compile Error)
- 런타임 오류 (Runtime Error)
- 논리 오류 (Logical Error) - 흐름상 잘못된 코딩
예외의 종류
Java
if문을 이용한 예외처리
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// String numStr = " 123";
// int num = Integer.parseInt(numStr); // NumberFormatException
String numStr = " 123";
Pattern p = Pattern.compile("^[0-9]*$"); // 정규식 표현, pattern 정규식 생성
Matcher m = p.matcher(numStr); // 패턴 매칭
boolean isNumber = m.matches(); // 해당 변수가 정규식 표현과 매치여부 판단
if (isNumber) {
// 사전 작업없이 그냥 실행시키면 에러가 발생하므로
// if문을 사용하여 해당 작업이 실행 가능할 때만 실행되도록 작성
int num = Integer.parseInt(numStr);
}
System.out.println("isNumber : " + isNumber);
// Object obj = new String("a");
// int a = (Integer) obj; // ClassCastException
Object obj = new String("a");
if (obj instanceof Integer) {
int a = (Integer) obj;
System.out.println("a1 : " + a);
} else if (obj instanceof String) {
String a = (String) obj;
System.out.println("a2 : " + a);
}
try-catch-finally를 이용한 예외처리
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String numStr = " 123";
try {
int num = Integer.parseInt(numStr); // parseInt(): 문자열을 int형으로 변환하는 메소드
System.out.println("정상실행 : " + num);
} catch (NumberFormatException e) { // Exception으로 받으면 포괄적 처리
e.printStackTrace(); // e에 대한 자세한 예외를 출력
} finally {
System.out.println("항상 실행 1");
}
Object obj = new String("a");
try {
int a = (Integer) obj;
System.out.println("정상실행 : " + a);
} catch (ClassCastException e) {
System.out.println(e.getMessage());
}finally {
System.out.println("항상 실행 2");
}
다중 예외 처리
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String text = "";
try {
BufferedReader reader = new BufferedReader(new FileReader("data/소나기.txt"));
while (true) {
String data = reader.readLine();
if (data == null)
break;
text += data + "\n";
}
reader.close();
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println(text);
}
예외 떠넘기기 (throw)
메소드를 호출한 곳으로 떠넘기는 역할
Java
1
2
3
4
5
6
7
8
9
public static void main(String[] args) throws NumberFormatException, ClassCastException{
String numStr = " 123";
int num = Integer.parseInt(numStr);
Object obj = new String("a");
int a = (Integer) obj;
System.out.println("정상 출력");
}
의도적인 예외 발생
file
ThrowExam.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.rmi.AccessException;
public class ThrowExam {
private String strNum;
private String num;
public String getStrNum() {
return strNum;
}
public String getNum() {
return num;
}
public void setStrNum(String strNum) {
this.strNum = strNum;
}
public void setNum(String num) {
this.num = num;
}
public void check() throws AccessException {
try {
int num = Integer.parseInt(this.strNum);
Object obj = new String(this.num);
int a = (Integer) obj;
} catch (NumberFormatException e) {
throw new AccessException("숫자 변환 실패");
} catch (ClassCastException e) {
throw new AccessException("형변환 실패");
}
}
}
file
ErrorExam03_thorw.java
Java
1
2
3
4
5
6
7
8
9
10
11
12
public class ErrorExam03_throws {
public static void main(String[] args) {
ThrowExam throwExam = new ThrowExam();
throwExam.setNum("123");
throwExam.setStrNum("abc");
try {
throwExam.check();
} catch (AccessException e) {
e.printStackTrace();
}
}
}
Reference
- 이 포스트는 SeSAC 인공지능 SW 개발자 양성 과정 - 김영식 강사님의 강의내용을 정리한 것입니다.
댓글남기기