오늘은 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해줘야되는 객체를 구현해야 할 때 유용하게 사용이 가능 할 것으로 보입니다.
'Java > 기본' 카테고리의 다른 글
[java] 프로그램 실행시간 출력 System.currentTimeMillis() (0) | 2019.10.16 |
---|---|
[java] 오버로딩, 오버라이딩 (overloading, overriding) (0) | 2019.10.03 |
[java] split() example (자바 스플릿 함수 예제, 문자열 잘라서 배열로 만들기) (0) | 2019.10.01 |
java substring, lastindex, replace 사용법 (문자열자르기,확장자명 가져오기) (0) | 2019.09.30 |
java hashmap use sample , change value (자바 해쉬맵 사용법 , 값value 변경하기) (0) | 2019.09.29 |
최근댓글