본문 바로가기

프로그래밍/Java

Java try-with-resources

반응형

FileOutputStream을 쓸 일이 생겼다. 다른 분이 만들어 놓은 유틸 클래스가 있어서 가져다 쓰려고 봤는데, 언뜻 보니 close()가 없었다.

우선 내가 알던 고전적인 코드는 다음과 같이 작성한다.

    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(file);
        fos.write(mFile.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

자원을 사용했으면 반드시 close()를 호출한다고 배웠다.

그런데 그 분이 작성하신 코드는 아래와 이렇다.

try (FileOutputStream fos = new FileOutputStream(file)){
    fos.write(mFile.getBytes());
} catch (IOException e) {
    e.printStackTrace();
}

아니, close가 없다니?!

근데 지금 보니까 try - catch가 어딘가 좀 낯설다. try에 원래 인자가 들어갔던가?

사실 이건 try-with-resources 라고 부르는 문법이다. 무려 Java7에 추가된 문법인데 여태 몰랐다. 지금이 2019년인데..

고인물 고인물 해도 내가 진짜 고인물이었구나...

매일매일 조금씩 겸손해지고 있다.

반응형

개발자가 그리는 인스타툰 팔로우하세요!