본문 바로가기
Java

JAVA try-cath-finally 🧏‍♂️try-with-resources

by titlejjk 2023. 6. 14.

Java 의 try-catch-finally는 수업시간에 DAO를 만들 때 많이 사용했었는데 구글링을 하다가 배우지 않았던 try-with-resources라는 것을 발견했다. 조금더 간편해졌다는 글에 귀가 솔깃솔깃 해졌는데 한번 찾아보고 정리해 보았다.

 

우선 두개 다 Java에서 예외 처리를 위해 사용되는 구문인데 각각의 특징을 먼저 살펴보자면

 

  • try - catch - finally

    try - catch - finally 구문은 예외 처리를 위한 전통적인 방식이며, try블록 내에서 예외가 발생할 수 있는 코드를 작성하고, catch블록에서 해당 예외를 처리한다. 
    finally 블록은 예외 발생 여부와 관계없이 항상 실행되는 코드 블록이다.
    try - catch - finally의 장점으로는 예외 처리를 세밀하게 제어할 수 있으며, 예외가 발생할 경우 catch블록에서 적절한 조치를 취할 수 있다. 리소스 해제 등의 정리 작업을 finally 블록에서 수행 할 수 있지만, 단점으로 코드가 복잡해지며 예외 처리 코드와 정상적인 코드가 섞여있어 가독성 저하가 우려되는 구문이다. 리소스 해제와 같은 정리 작업을 잊어버리거나 이로 인해 오류가 발생할 수도 있다.

 

  • try-with-resources 구문은 Java7부터 도입된 자원 관리를 위한 편리한 방식이다.
    try 블록 내에서 자원을 선언하고, 해당 자원은 try블록이 종료될 때 자동으로 닫힌다.
    이 구문의 장점은 자원의 자동해제를 보장하고 예외 발생 여부와 상관없이 자원이 안전하게 닫힌다. 또한 코드가 간결해지고 가독성이 향상되며 try-with-resources 구문을 사용하면 명시적인 리소스 해제 코드를 작성할 필요가 없다.
    다만 자원이 AutoCloseable 인터페이스를 구현해야만 사용할 수 있으며 일부 특정한 상황에서는 이를 만족 시키기 어려울 수 있다.

try-catch-finally의 예제를 살펴보자면

try {
    // 예외가 발생할 수 있는 코드
    // 예를 들어, 파일에서 데이터를 읽거나 외부 리소스에 접근하는 작업 등
} catch (Exception e) {
    // 예외 처리 코드
    // 예외가 발생했을 때 실행되는 블록
} finally {
    // 정리 작업 또는 리소스 해제 코드
    // 예외 발생 여부와 상관없이 항상 실행되는 블록
}

이런 식인데 try블록 내에는 예외가 발생할 수 있는 코드, catch블록은 예외가 발생했을 때 해당 예외를 처리하는 코드를 작성, finally블록은 예외 발생 여부와 상관없이 항상 실행되는 코드 블록으로, 주로 리소스의 해제나 정리작업을 처리하는데 쓴다.

 

try-with-resources

try (FileReader reader = new FileReader("file.txt")) {
    // 자원을 사용하는 코드
    // 예를 들어, 파일에서 데이터를 읽는 작업 등
} catch (Exception e) {
    // 예외 처리 코드
    // 예외가 발생했을 때 실행되는 블록
}

//간결해..!

위의 예제에서 try블록 내에는 자원을 선언하고 초기화하는 코드가 작성된다. 자원은 try-with-resources 구문 내에서 선언되며, 해당 자원은 try블록이 종료될 때 자동으로 닫히게 된다. 이는 자원이 AutoCloseable 인터페이스를 구현하고 있어야 가능하다. catch블록은 예외가 발생했을 때 해당 예외를 처리하는 코드를 작성한다.

'Java' 카테고리의 다른 글

Java Optional Class  (0) 2023.06.26
JAVA Jstl  (0) 2023.06.19
JAVA Cookie  (0) 2023.06.13
간단히 보는 JAVA의 자료구조  (0) 2023.06.13
EL (Expression Language)  (0) 2023.06.13

댓글