์ ํ์ ์ธ try-catch-finally ๊ตฌ๋ฌธ์ ์ฌ์ฉํ Stream ์ฒ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
try {
InputStream in = connection.getInputStream();
OutputStream out = connection.getOutputStream();
...
...
} catch (IOException e) {
log.error(e.getMessage());
} finally {
if(out != null) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}finally ๊ตฌ๋ฌธ์ try ๊ตฌ๋ฌธ์์ ์๋ฌ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ด๋ฆฐ stream์ ๋ซ์ Memory Leak์ ๋ฐฉ์งํ๋ค. ํ์ง๋ง, ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ค์ ๊ฐ๋ฐ์๊ฐ ์์ฑํด์ผ ํ ์ฝ๋ ๋ณด๋ค Stream์ ๋ํ ์์ธ ์ฒ๋ฆฌ๋ฅผ ์ํ ์ฝ๋๊ฐ ๋ ๋ง์ ๋ถ๋ถ์ ์ฐจ์งํ๋ค.
Java 7๋ถํฐ try-with-resource ๋ฌธ๋ฒ์ ์ ์ฉํด ์์์ ๋ฐ๋ฉํ๋ ๋ฐฉ๋ฒ์ด ๊ฐ๋ฅํด์ก๋ค.
try (InputStream in = connection.getInputStream(); OutputStream out = connection.getOutputStream()) {
HttpRequest httpRequest = new HttpRequest(in);
HttpResponse httpResponse = new HttpResponse(out);
...
...
} catch (IOException e) {
log.error(e.getMessage());
}try ์กฐ๊ฑด์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ์๋์ผ๋ก ์ด์๋ stream์ ๋ซ์์ฃผ๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ์ฝ๋์์ finally ๋ถ๋ถ์ ์์ฑํ๋ฉฐ ๋ฐ์ํ๋ ๋ถํ์ํ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.