๋ธ๋ก๊ทธ ์ฎ๊ฒผ์ต๋๋ค! ๐ก integer.blog
์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๋ ์ค Try-with-resources๋ฅผ ์๊ฒ ๋์ด ์ ๋ฆฌ
์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๊ธฐ ์ ์ฝ๋๋ ์๋์ ๊ฐ์๋ค.
public static String getHtml(String url) {
try{
URL targetUrl = new URL(url);
BufferedReader reader = new BufferedReader(new InputStreamReader(targetUrl.openStream()));
StringBuffer html = new StringBuffer();
String tmp = "";
while ((tmp = reader.readLine()) != null) {
html.append(tmp);
}
reader.close(); // ์ด ๋ถ๋ถ ์ ์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด BufferedReader๋ฅผ ๋ซ์ง ๋ชปํ๊ณ catch๋ฌธ์ผ๋ก ๋น ์ง๋ ๋ฌธ์
return html.toString();
} catch (MalformedURLException e) {
reader.close(); // ์ด๊ธฐ์๋ ์ถ๊ฐํ์ง ์์๋ ์ฝ๋
e.printStackTrace();
throw e;
} catch (IOException e) {
reader.close(); // ์ด๊ธฐ์๋ ์ถ๊ฐํ์ง ์์๋ ์ฝ๋
e.printStackTrace();
throw e;
} catch (Exception e) {
reader.close(); // ์ด๊ธฐ์๋ ์ถ๊ฐํ์ง ์์๋ ์ฝ๋
e.printStackTrace();
throw e;
}
ํ๊ตญ๊ฑฐ๋์ API๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด url์ ์
๋ ฅ๋ฐ์ ํด๋น ๋ฆฌ์์ค์ html์ String์ผ๋ก ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์์ฑํ๋ค.
์ด ๋ฅ์ฝ๋๋ ๋ณด๊ธฐ๋งํด๋ ์ง์ ๋ถํ๋๋ฐ,
์ง์ ๋ถํ ๊ฒ์ ์ฐจ์นํ๊ณ , reader.close()
์ ๋๋ฌํ๊ธฐ ์ ์ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ง ์์ ์ฝ๋์๋ค.
๊ทธ๋์ ์์ ์ฝ๋์ ๊ฐ์ด reader.close()
๋ฅผ ๋ชจ๋ catch๋ฌธ์ ์ถ๊ฐํ๊ฑฐ๋,
์๋์ ์์์ ๊ฐ์ด finally๋ฌธ์ ๋ง๋ค์ด์ ์ฒ๋ฆฌํ์ด์ผ ํ๋ค.
SomeResource resource = null;
try {
resource = getResource();
use(resource);
} catch(...) {
...
} finally {
if (resource != null) {
try { resource.close(); } catch(...) { /* ์๋ฌด๊ฒ๋ ์ ํจ */ }
}
}
(์ถ์ฒ: ์ต๋ฒ๊ท ๋ ๋ธ๋ก๊ทธ)
ํ์ง๋ง ๋์ ๋ฅ์ฝ๋๋ฅผ ๋ณด์ ํ์๋ถ๊ป์ JDK7 ๋ถํฐ ์ถ๊ฐ๋ try-with-resources
๋ฅผ ์ค๋ช
ํด์ฃผ์
จ๋ค.
๊ทธ๋์ Try-with-resources
๋ ๋ฌด์?
Try-with-resources
๋ ์๋์ ์ฝ๋์ ๊ฐ์ด
try์ ์์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๋ฉด, try ์ฝ๋ ๋ธ๋ก์ด ๋๋๋ฉด ์๋์ผ๋ก ์์์ ์ข
๋ฃํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.
์ฆ, ๋ฐ๋ก finally ๋ธ๋ก์ด๋ ๋ชจ๋ catch ๋ธ๋ก์ ์ข ๋ฃ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์๋ ๋๋ค.
try (SomeResource resource = getResource()) {
use(resource);
} catch(...) {
...
}
๊ทธ๋ฐ๋ฐ ์ด ๋, try์ ์ ๋ฌํ ์ ์๋ ์์์ AutoCloseable
์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ํ์ ๋๋ค.
AutoCloseable
์ JDK1.7๋ถํฐ ์ถ๊ฐ๋ ์ธํฐํ์ด์ค๋ค.
/**
* @author Josh Bloch
* @since 1.7
*/
public interface AutoCloseable {
void close() throws Exception;
}
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด try()
์์ ๋ณต์์ ์์ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ ์ ์๋ค.
try(Something1 s1 = new Something1();
Something2 s2 = new Something2()) {
} catch(...) {
...
}
๋ด๊ฐ ์์ฑํ ์ฝ๋์์๋ BufferedReader
์ InputStreamReader
ํด๋์ค๊ฐ ์ถ์ํด๋์ค Reader
๋ฅผ ์์๋ฐ์๊ณ ,
Reader
๋ Closeable
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์์ผ๋ฉฐ,
Closeable
์ธํฐํ์ด์ค๋ AutoCloseable
์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์๋ค.
๋๋ฌธ์ try-with-resources
๋ฅผ ํ์ฉํ์ฌ ์๋์ ๊ฐ์ด ๋ด๊ฐ ์์ฑํ๋ ์ฝ๋๋ฅผ ๊ฐ์ ํ ์ ์์๋ค.
public static String getHtml(String url) throws IOException {
URL targetUrl = new URL(url);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(targetUrl.openStream()))){
StringBuffer html = new StringBuffer();
String tmp;
while ((tmp = reader.readLine()) != null) {
html.append(tmp);
}
return html.toString();
}
}
์ฝ๋๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ผ๋ฉฐ ๋ฐฐ์ด ๊ฒ์ด ๋ง์ ํ๋ณตํ ํ๋ฃจ์๋ค :)