Java

Java / 예외 처리 - 실습

Dear-J 2025. 3. 2. 06:27

정상, 예외 흐름 분리

자바의 예외 처리 메커니즘과 try, catch 구조로 정상 흐름은 try 블럭에 모아서 처리, 예외 흐름은 catch 블럭에 모아서 처리

>> 정상 흐름과 예외 흐름을 명확하게 분리해 코드의 가독성 향상

 

finally

try를 시작하기만 하면 finally 코드 블럭은 어떤 경우라도 반드시 호출됨

>> 주로 try에서 사용한 자원을 해제할 때 주로 사용

 

try, catch 안에 처리할 수 없는 예외가 발생해도 반드시 호출

 

>> 정상 흐름과 예외 흐름을 분리해서 코드의 가독성 향상

>> 사용한 자원을 항상 반환할 수 있도록 보장

 

처리할 수 없는 예외

상대 네트워크 서버에 문제가 발생해 통신이 불가능하거나 데이터베이스 서버에 문제가 발생해 접속이 불가하면

>> 애플리케이션에서 연결 오류, 데이터베이스 접속 실패와 같은 예외 발생

 

시스템 오류 때문에 발생한 건 예외를 잡아도 해결할 수 있는 것이 거의 없음

>> 고객에게는 오류 메세지, 내부 개발자에게는 오류에 대한 로그

 

체크 예외의 부담

처리할 수 없는 예외가 많아지고 프로그램이 점점 복잡해짐

 

실무에서는 수 많은 라이브러리를 사용하고 다양한 외부 시스템과 연동

 

처리할 수 없는 체크 예외를 모든 클래스에서 계속 밖으로 던져야 하는 지저분한 코드 생성

>> throws Exception이라는 악수

 

throws Exception의 문제

다른 체크 예외를 체크할 수 있는 기능이 무효화, 중요한 체크 예외를 다 놓침

 

언체크(런타임) 예외 사용

일일이 throws를 선언하지 않아도 됨

일부 언체크 예외를 잡아서 처리할 수 있으면 잡아서 처리하면 됨

 

처리할 수 없는 예외들은 공통으로 처리할 수 있는 곳을 만들어 한 곳에서 해결

 

try-with-resources

try가 끝나면 외부 자원을 반납하는 패턴이 반복되면서 자바에서는 try with resources라는 편의 기능 도입

 

먼저 AutoCloseable 인터페이스 구현

>> try with resources를 사용할 떄 try가 끝나는 시점에 close()가 자동으로 호출

 

리소스 누수 방지 : 모든 리소스가 제대로 닫히도록 보장

코드 간결성 및 가독성 향상 : 명시적인 close() 호출이 필요 없음

스코프 범위 한정 : 리소스로 사용되는 client 변수의 스코프가 try 블럭 안으로 한정되어 코드 유지보수가 더 쉬워짐

조금 더 빠른 자원 해제 : 기존엔 catch 이후에 자원을 반납했지만 try with resources는 try 블럭이 끝나면 즉시 close() 호출

'Java' 카테고리의 다른 글

Java / 제네릭(Generic) 2  (0) 2025.03.04
Java / 제네릭(Generic) 1  (0) 2025.03.02
Java / 예외 처리 - 이론  (0) 2025.02.28
Java / 지역 클래스, 익명 클래스  (0) 2025.02.27
Java / 중첩 클래스, 내부 클래스  (0) 2025.02.27