예외처리 - try ~ catch ~ finally

2024. 6. 3. 16:53JAVA

 

try{
	// 예외가 발생할 수 있는 코드
}catch(예외클래스 e){
	// 정상화시키는 코드
}finally{
	// try 블럭에 담긴 코드 종료 후 실행될 코드
}

 

앞선 글에서 try~catch 문을 짧게나마 들여다 보았다.

try ~ catch 문에는 문제점이 존재한다.

 

catch(잡아낼 예외 클래스 e){} 에서 예상했던 예외 외의 상황이 발생했을 때,

별도의 처리가 없으면 그대로 예외가 밖으로 날아가 버리고

결국 프로그램 종료에 이른다는 것이다.

 

이 때, 사용한 자원에 대한 회수 처리가 이루어져야 하는데,

JVM 관리 하에 있는 코드면 몰라도, DB 등 외부 프로그램을 사용할 경우, db는 자원회수(연결 종료)가 이루어지지 않는다.

앱에서 동일한 오류가 발생할 때마다 연결이 계속해서 새로 생성되고, 유지되고, 이윽고, db에 접속할 수 없는 상황에 이르게 된다.

 

따라서, 이런 상황을 미연에 방지하기 위해 finally {} 가 존재한다.

설령, RuntimeException 이 발생하여 프로그램이 종료된다 하더라도, 외부 자원은 돌려줘야 하니까.

 

try 블럭의 코드가 실행되도,

catch() 에서 예외를 잡아 처리 하던, 못 하던

마지막에 꼭 실행되는 블럭 finally 되시겠다.

 

finally 를 통해 자원 미회수에 다른 문제를 방지할 수 있게 된다.


그런데, finally로 자원 회수 해도 결국 프로그램은 멈추게 되는 상황이 발생할 수 있는데

이렇게 되면 어떻게 해야 할까?

 

최상위인 main()에서 catch로 예외 처리를 해야 하나?

'JAVA' 카테고리의 다른 글

복습 - 배열  (0) 2024.07.02
배열  (0) 2024.06.23
예외처리 - Unchecked Exception(런타임 익셉션)  (0) 2024.06.02
예외처리 -Checked Exception  (0) 2024.06.02
중첩 클래스 -정적 중첩 클래스  (0) 2024.05.28