본문 바로가기

Java

[Java] try-with-resources

 

 

1. try-with-resources 구문

  • Java7 부터 도입된 기능으로, 자원을 명시적으로 닫아주는 코드를 간소화 하기 위한 구문
  • 주로 파일, 네트워크 연결, 데이터베이스 연결 등의 자원을 사용한 후에 반드시 닫아주어야 하는 경우 활용됨
  • AutoCloseable 인터페이스를 구현한 자원을 효과적으로 사용할 수 있음
  • AutoCloseable은 close() 메서드를 제공하는 인터페이스로 이를 구현한 클래스는 try-with-resources문에서 사용될 수 있음

 

 

2. 기본 구조

try (자원의 생성 및 할당) { // AutoCloseable을 구현한 객체를 생성하고 할당, 블록 실행 전에 자원 초기화
    // 자원을 사용하는 코드 작성
    // 블록이 끝나면 자동으로 close() 메소드가 호출되어 자원이 닫힘
} catch (ExceptionType e) {
    // 예외 처리 코드
}

 

 

3. 적용하기

 

1) 기존 코드

 try {
                            MqttClient client = new MqttClient(mqttUrl, MqttClient.generateClientId());
                            MqttConnectOptions options = new MqttConnectOptions();
                            options.setCleanSession(true);

                            client.connect(options);

                            MqttMessage mqttMessage = new MqttMessage(mqttRequestDto.getPayload().getBytes());
                            mqttMessage.setQos(1);

                            client.publish(mqttRequestDto.getTopic(), mqttMessage);

                            client.disconnect();
                        } catch (MqttException e) {
                            e.printStackTrace();
                        }

 

2) try-with-resources 적용하여 변경

 try(MqttClient client = new MqttClient(mqttUrl, MqttClient.generateClientId())) {
                            MqttConnectOptions options = new MqttConnectOptions();
                            options.setCleanSession(true);

                            client.connect(options);

                            MqttMessage mqttMessage = new MqttMessage(mqttRequestDto.getPayload().getBytes());
                            mqttMessage.setQos(1);

                            client.publish(mqttRequestDto.getTopic(), mqttMessage);

                            client.disconnect();
                        } catch (MqttException e) {
                           e.printStackTrace();
                        }

'Java' 카테고리의 다른 글

[Java] LinkedBlockingQueue 클래스  (0) 2023.12.12
[Java] 맥북 m2 JDK 설치  (1) 2023.11.19
[Java] 문자열 비교 == 과 equals()  (0) 2023.09.02
Java 네트워킹(networking)  (0) 2023.01.26
Java 입출력(I/O)  (0) 2023.01.26