1 분 소요


◆ 예외처리

-java는 에러 난 상황을 크게 오류(Error)와 예외(Exception)으로 구분한다. 예외(Exception)는 개발자가 처리 할 수 있는 에러이고 오류(Error)는 시스템에서 발생하여 개발자가 처리 할 수 없는 에러이다.

-프로그램 컴파일시에 발견하지 못하는 에러를 Runtime에러라고 하는데, 프로그래머가 예기치못한 예외의 발생에 미리 대처하는 코드를 작성하는 것으로, 실행중인 프로그램의 비정상적인 종료를 막고, 상태를 정상상태로 유지하는 것이 목적이다.


예외처리를 무조건 작성해야 하는 경우

-IO처리 했을 경우(입출력 기능)

-DB에서 연동시켰을 경우 : 예외상황을 정상으로 처리하여 리턴시켜 에러가 발생하지 않도록 할 수 있다.




1. 예외

e.printStackTrace()

개발자들이 주로 사용하는 것으로 에러 메세지의 발생 근원지를 찾아서 단계별로 에러를 출력한다.

catch에 에러 발생했을때의 로직에 작성해주면 된다.


1.1 try catch문

 try {
    에러가 발생하지 않았을 때의 로직
}
catch(Exception err){
    에러 발생했을 때의 로직
} finally {
    공통로직
}

여기에서 catch의 경우 여러번 사용 가능하다. 기본적으로 Exception err(모든 exception 객체의 조상)을 쓰지만 여러개의 err를 조건에 했당했을 시 catch를 여러번 사용할 수 있다.

finally는 예외 발생 여부와 상관없이 무조건 수행되어야할 로직이 있을 경우 사용하는 블럭이다. 그래서 예외가 발생하지 않는다면 try블럭이후 finally 블럭이 수행된다.




2. close()

2.1 의미

Java에선 Stream이나 DB Connection처럼 다양한 자원을 외부에서 사용할 수 있다.

하지만 어떤 언어든지 간에 자원을 사용한 후 더 이상 사용할 필요가 없다면 자원의 효율성을 위해 반환해 줘야 한다.

자원반납은 finally 블록 내부에 작성하는 이유는 항상 .close()가 실행되도록 보장해 줄 수 있기 때문에 finally 문 안에 작성한다.


2.2 close() 메소드를 알맞게 호출해주지 않을 경우에는 다음과 같은 문제가 발생한다.

  1. Statement를 닫지 않을 경우, 생성된 Statement의 개수가 증가하여 더 이상 Statement를 생성할 수 없게 된다.
  2. close() 하지 않으므로 불필요한 자원(네트워크 및 메모리)을 낭비하게 된다.
  3. 커넥션 풀을 사용하지 않는 상황에서 Connection을 닫지 않으면 결국엔 DBMS에 연결된 새로운 Connection을 생성할 수 없게 된다.
try{
    fis = new FileInputStream("score.dat");
    dis = new DataInputStream(fis);
}catch(IOException ie){
	ie.printStackTrace();
} finally {
    try{
        if(dis != null)
           dis.close();
    }catch(IOException ie){
    	ie.printStackTrace();
    }
}



◆RuntimeException

RuntimeException은 Java Virtual Machine의 정상적인 작동 중에 발생할 수 있는 예외의 슈퍼 클래스이다.

RuntimeException 및 해당 서브 클래스는 메서드 또는 생성자의 실행에 의해 발생한다.

%



checked exception

  • 반드시 예외 처리를 해야 한다. (try~catch를 통해)
  • 컴파일 단계에서 확인 가능하다.
  • 예외 발생 시 트랜잭션 roll back 하지 않는다.
  • RuntimeException을 제외한 Exception의 하위 클래스


unchecked exception

  • 명시적 예외 처리를 강제하지 않는다.
  • 실행 단계에서 확인 가능하다.
  • 예외 발생 시 트랜잭션 roll back 한다.
  • RuntimeException의 하위 클래스


태그:

카테고리:

업데이트:

댓글남기기