오류
컴파일 오류 : 프로그램 코드로 인해 발생하는 문법적인 오류
실행 오류 : 실행중인 프로그램이 의도치않은 동작을 하거나(bug) 프로그램이 중지되는 오류(runtime error)
-> 자바의 예외 처리를 통해 프로그램의 비정상적인 종료를 막고 로그를 기록한다.
시스템 오류 : 가상머신에서 발생하며 프로그래머가 처리할 수 없다. 동적 메모리를 다 사용하거나 stack overflow 등
예외(Exception) : 프로그램에서 제어할 수 있는 오류. 읽으려는 파일이 없거나 네트웍이나 소켓 오류 등. 자바에선 예외에 대한 처리를 한다.
예외 클래스 중에 Exception 클래스가 가장 상위 클래스이다.
예외 처리 방법
try-catch, try-catch-finally 문
try{
예외가 발생할 수 있는 부분
}catch( 예외 종류){
예외가 발생했을 때 처리하는 내용
}finally{
예외의 발생 여부와 상관없이 항상 수행하는 부분
}
try-with-resource
리소스를 자동으로 해제해주는 구문
해당 리소스가 AutoCloseable을 구현한 경우 close()를 호출하지 않아도 자동으로 close()가 호출된다.
AutoCloseable 인터페이스에서 close 메소드를 오버라이딩하면 된다.
throw
try구문으로 블록처리하지 않고 메소드 선언부에 throws를 추가한다.
예외가 발생하는 메소드에서 예외를 처리하는 것이 아닌 메소드를 호출하는 곳에서 try-catch를 통해 예외를 처리한다.
다중 예외는 위 사진 처럼 catch를 여러번 사용해도 되고 한 catch 구문에서 |를 통해 한번에 처리할 수도 있다.
ex) catch(FileNotFoundException | ClassNotFoundException e) { }
말했듯이 Exception이 가장 상위 클래스이므로 제일 마지막에 위치해야 한다.
사용자가 필요한 경우 예외를 정의해서 사용할 수도 있다.
Exception에서 상속받아 예외를 처리한다.
사용자 정의 예외 처리 예시. IDFormatException이라는 예외 처리 클래스를 생성했고 이를 활용한 코드이다.
package exception;
public class IDFormatTest {
private String userId;
public String getUserId() {
return userId;
}
public void setUserId(String userId) throws IDFormatException {
if(userId == null) {
throw new IDFormatException("Id cant` be null");
}
else if(userId.length() < 8 || userId.length() > 20) {
throw new IDFormatException("Id should be in range of 8 to 20");
}
this.userId = userId;
}
public static void main(String[] args) {
IDFormatTest idTest = new IDFormatTest();
String myId = null;
try {
idTest.setUserId(myId);
}catch(IDFormatException e) {
System.out.println(e);
}
myId = "1234567";
try {
idTest.setUserId(myId);
}catch(IDFormatException e) {
System.out.println(e);
}
}
}
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 쓰레드(Thread) (0) | 2020.02.12 |
---|---|
[Java] 입출력 스트림 (0) | 2020.02.10 |
[Java] 스트림(stream) (0) | 2020.02.06 |
[Java] 람다식 (0) | 2020.02.06 |
[Java] 내부 클래스 (0) | 2020.02.06 |