728x90
반응형
Exception
- Exception 과 처리방법을 알아봅니다.
Error(에러) 와 Exception(예외)
Error 와 Exception 에는 차이점이 존재한다.
Error
- 시스템 레벨에서 프로그램에 심각한 문제를 일으킨다.
- 실행중인 프로그램을 비정상 종료한다.
- 개발자가 예측 할수 없다.
- Error에 대한 처리는 할 수 없다.
Exception
- 실행중인 프로그램을 비정상 종료시킨다.
- 발생할 수 있는 상황을 예측하여 처리 할 수 있다.
- 개발자는 예외처리를 통해 상황을 해결할 수 있다.
Exception 처리 과정
- try 문으로 들어가면 해당 문 안에 있는 logic을 수행한다.
- Exception 이 발생하면 Exception을 처리하기 위한 catch 을 찾는다.
- 해당 하는 catch 문이 없을 경우 finally 문으로 들어가게 된다.
try {
try {
// logic 수행
} catch (IOException e) {
// Exception 발생시 해당 블럭에 들어옴
} catch (SQLException e) {
// ....
}
} catch (ClassNotFoundException e) {
// ....
} catch (IllegalAccessException e) {
// ....
} finally {
// 예외 발생이 안했을경우 해당 블럭으로 들어온다.
}
Exception 클래스
- RuntimeException 클래스를 상속받는 자식 클래스들 치명적인 예외가 아니기 때문에
try catch 보다 프로그램을 개발 하면서 예외가 발생하지 않도록 해야 한다. - 하지만 다른 Exception은 치명적이기 때문에 반드시 익셉션 처리를 해줘야 한다.
예외 복구, 회피, 전환
예외복구:
- 예외가 발생 했을 경우 예외 상황을 알려준다.
- 대안을 찾아서 해결해 준다.
구현방법
- 예외가 발생했을때 적절한 방식으로 코드를 수행하게 해준다.
- 예를 들어 파일을 찾을때 해당 파일이 없으면 IOException이 발생한다.
- 그렇게 되면 백업파일을 열어 정상적으로 수행되게 한다.
구현
public class ExceptionEx {
public static void main(String[] args) {
try {
// 파일 열기 수행
} catch (IOException e) {
// 백업파일 열기 수행
}
}
}
예외 회피:
- 예외를 자신이 직접 처리하지 않고 호출한 쪽으로 던지는 방식이다.
구현방법
- 메소드 선언부에 throws 키워드를 사용하여 해당 메소드를 사용할때 발생할 수 있는 예외를 미리
명시 할수 있다. - 이렇게 하면 해당 메소드를 사용할 때 발생할 수 있는 예외를 사용자가 충분히 인지할 수 있다.
구현
public class ExceptionEx {
// throws 발생할수 있는 예외선언
// 해당 메소드에서는 Exception 모든 익셉션이 발생 할수 있다.
static void handlingException() throws Exception {
// Exception을 던진다.
throw new Exception();
}
public static void main(String[] args) {
try {
// 코드실행
handlingException();
} catch (Exception e) {
// handlingException() 에서 던진 예외를 catch가 잡아 처리한다.
System.out.println("main() 메소드에서 예외가 처리됨!");
}
}
}
예외 전환
- 발생한 예외에서 또다른 예외를 던지는 것이다.
- 사용하는 이유는 예외를 받아 처리할때 명확하게 인지 하도록 한다.
구현방법
- 예외가 발생 했을경우 또 예외를 던지면 된다.
구현
try 문 안에서 service 로직을 수행하다가 exception이 발생하면
어떤 종류의 Exception인지 확인 후 세부적인 Exception 을 던져준다.
public void addMember(Member member) throws DuplicateMemberException, SQLException {
try {
//jpa 를 이용하여 회원을 저장한다.
}
catch(AppException e) {
if(e.getErrorCode() == AppError.DUPLICATE_MEMBER) {
throw DuplicateMemberException();
} else {
throw e; //그 외의 경우는 SQLException 그대로
}
}
}
try-with-resources
- 사용한 자원을 자동을 해제해 주는 문이다.
- 파일을 열어서 읽었으면 다시 닫아줘야 한다.
- 하지만 해당 구문을 사용하면 한방에 해결 할 수 있다.
적용전
static String readFile(String filePath) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(filePath));
try {
return br.readLine();
} finally {
if (br != null)
br.close();
}
}
적용후
static String readFile(String filePath) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
return br.readLine();
}
}
참고:http://tcpschool.com/java/java_exception_intro
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] static (0) | 2021.08.23 |
---|---|
[Java] Interface, Abstract (0) | 2021.08.23 |
[Java] Checked Exception, Unchecked Exception (0) | 2021.08.23 |
[Java] String, StringBuffer, StringBuilder (0) | 2021.08.23 |
[Java] String Object 와 String literal, 동일성 동등성 (0) | 2021.08.21 |
댓글