오늘은 java 7부터 도입된 새로운 기능인 try catch with resources를 알아보겠습니다.

 

보통 파일 읽기 쓰기와 같이 AutoCloseable 인터페이스를 구현하는 경우 객체를 사용하고 꼭 close() 해주는 작업이 필요합니다.

아래는 기존 방식으로 파일 쓰기 코드를 작성시 객체에 대해 close() 해주는 예시 입니다.

 

 

일반적인 파일 읽기쓰기 , Try catch block


파일 쓰기를 위한 bufferdWriter , FileWriter 객체를 생성 하고, try catch의 마지막 finally block에서

null check 및 close() 하는 코드를 삽입해야 합니다.  물론 해당 객체를 사용할시 새로운 try catch block도 작성해야합니다.

 

 

이렇게 길어지는 코드를 줄일 수 있는 방법이 생겼습니다. 

try catch with resources라는 개념으로 try catch block에서 생성한 객체를 자동을 close() 해주는 향상된 try catch문법입니다.

아래 예시를 확인 해보겠습니다.

 

Try catch with Resources


try() 안에 close()가 필요한 객체를 생성하면,

try catch 블록이 종료되는 시점에 jvm이 알아서 close() 처리를 해주게 됩니다. 

finally 구간 코드가 사라져 가독성도 좋아진 것을 확인 할 수 있습니다.

 

그럼 실제로 try block 종료 후에 해제가 되는지 확인해보도록 하겠습니다.

아래 코드는 정상적으로 close()되는지 테스트를 위한 코드 입니다.

 

testbw 라는 BufferedWriter 객체를 Try block 바깥에 생성하고 

try block 내에서 생성된 bw 같아 지도록 설정 한 후, try block이 끝나는 시점에

testbw객체가 close()된 상태인지를 확인 해보겠습니다.

 

 

디버깅으로 테스트해보기


아래 코드를 디버깅을 걸고 실행해보겠습니다.

 

20번 라인까지 실행을 하면 testbw객체가 열려있는(close == false ) 상태임을 알 수 있습니다. 

finally 블록까지 진행을 시켜보겠습니다.

 

아래이미지의 하단 부분의 Variable의 testbw 객체의 상세를 확인해보면,

finally 라인에 왔을때 closed 처리 된 것을 알 수 있습니다. 

또한, close()처리가 되지 않은 것이라면 파일쓰기가 정상적으로 진행되지 않았을 것입니다. 

위의 일반적인 코드에서 close() 라인에 주석을 걸면 파일 쓰기가 되지 않은 것을 확인 할 수 있습니다.(한 번 진행 해보세요)

 

파일쓰기 정상적으로 진행된 모습

 

결론적으로, try catch with resourecs를 활용하면 close() 코드가 필요없어지며 더 간결하게 파일 쓰기, 읽기가 가능합니다.

dbconnection과 같이 close해줘야되는 객체를 구현해야 할 때 유용하게 사용이 가능 할 것으로 보입니다.

 

 

LIST
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기