"์๋ฏธ๊ณ , ์ด ์ค๋๋ง!"
"์๋ฐ๋ฅผ ๋ฐฐ์ฐ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค, ํจ์ฅ๋!"
"์์ฌํด, ์๋ฏธ๊ณ . ์ค๋ ์ฐ๋ฆฌ๋ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด ์ฃผ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. Java ํ๋ก๊ทธ๋จ์ด ์ธ๋ถ ๋ฆฌ์์ค์ ์ํธ ์์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ๋งค์ฐ ํฅ๋ฏธ๋ก์ด Java ๋ฌธ ํ๋๋ฅผ ์ฐ๊ตฌํ ๊ฒ์ ๋๋ค. ๊ท๋ฅผ ๋ง์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค."
"๋๋ ๋ชจ๋ ๊ท์ ๋๋ค."
"Java ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋๋๋ก Java ์์คํ ์ธ๋ถ์ ์ํฐํฐ์ ์ํธ ์์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋์คํฌ์ ํ์ผ๊ณผ ํจ๊ป ์ด๋ฌํ ์ํฐํฐ๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ถ ๋ฆฌ์์ค๋ผ๊ณ ํฉ๋๋ค."
"๊ทธ๋ผ ๋ด๋ถ ์์์ด๋ ๋ฌด์์ ๋๊น?"
"๋ด๋ถ ๋ฆฌ์์ค๋ Java ์์คํ ๋ด๋ถ์์ ์์ฑ๋ ๊ฐ์ฒด์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ํธ ์์ฉ์ ๋ค์ ์ฒด๊ณ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
"์ด์ ์ฒด์ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ์๊ฒฉํ๊ฒ ์ถ์ ํ๊ณ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ๋ฆฌ์์ค์ ๋ํ ๊ณต์ ์ก์ธ์ค๋ฅผ ์ ์ดํฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ ํ๋ก๊ทธ๋จ์ด ํ์ผ์ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ด ํด๋น ํ์ผ์ ๋ณ๊ฒฝ(๋๋ ์ญ์ )ํ ์ ์์ต๋๋ค. ์ด ์์น์ ๊ทธ๋ ์ง ์์ต๋๋ค. ํ์ผ๋ก ์ ํ๋์ง๋ง ๊ฐ์ฅ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
"์ด์ ์ฒด์ ์๋ ํ๋ก๊ทธ๋จ์ด ๋ฆฌ์์ค๋ฅผ ํ๋ ๋ฐ/๋๋ ํด์ ํ ์ ์๋ ๊ธฐ๋ฅ(API)์ด ์์ต๋๋ค. ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ๋ฆฌ์์ค๋ฅผ ํ๋ํ ํ๋ก๊ทธ๋จ๋ง ์์ ํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ด ๋ฆฌ์์ค๋ฅผ ํ๋ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ.
"์ฌ๋ฌด์ค์์ ์ปคํผ ๋จธ๊ทธ๋ฅผ ๊ณต์ ํ๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋๊ตฐ๊ฐ ๋จธ๊ทธ๋ฅผ ๊ฐ์ ธ๊ฐ๋ฉด ๋ค๋ฅธ ์ฌ๋์ด ๋ ์ด์ ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค. ํ์ง๋ง ๋จธ๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ ์ป๊ณ ์ ์๋ฆฌ์ ๋ฃ์ผ๋ฉด ๋๊ตฌ๋ ๋ค์ ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค."
"์์๋ค. ์งํ์ฒ ์ด๋ ๋ค๋ฅธ ๋์ค๊ตํต์ ์ข์๊ณผ ๊ฐ๋ค. ์๋ฆฌ๊ฐ ๋น์ด ์์ผ๋ฉด ์๋ฌด๋ ํ ์ ์๋ค. ์๋ฆฌ๊ฐ ๊ฝ ์ฐจ๋ฉด ๊ทธ ์๋ฆฌ๋ฅผ ์ฐจ์งํ ์ฌ๋์ด ์กฐ์ข ํ๋ค."
"๊ทธ๋ ์ต๋๋ค. ์ด์ ์ธ๋ถ ๋ฆฌ์์ค ํ๋ณด ์ ๋ํด ์ด์ผ๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค. Java ํ๋ก๊ทธ๋จ์ด ๋์คํฌ์ ํ์ผ ์์ ์ ์์ํ ๋๋ง๋ค Java ์์คํ ์ ์ด์ ์ฒด์ ์ ๋ ์ ์ก์ธ์ค๋ฅผ ์์ฒญํฉ๋๋ค. ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ Java ์์คํ ์ ๊ทธ๊ฒ.
"ํ์ง๋ง ํ์ผ ์์ ์ ๋ง์น ํ์๋ ์ด ๋ฆฌ์์ค(ํ์ผ)๋ฅผ ํด์ ํด์ผ ํฉ๋๋ค. ์ฆ, ๋ ์ด์ ํ์ํ์ง ์์์ ์ด์ ์ฒด์ ์ ์๋ ค์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด ๋ฆฌ์์ค๋ ๊ณ์ ํด์ ๋น์ ์ ํ๋ก๊ทธ๋จ์ ์ํด ๊ฐ์ต๋ฉ๋๋ค."
"๊ณตํํ๊ฒ ๋ค๋ฆฝ๋๋ค."
"๊ทธ๋ ๊ฒ ์ ์งํ๊ธฐ ์ํด ์ด์ ์ฒด์ ๋ ์คํ ์ค์ธ ๊ฐ ํ๋ก๊ทธ๋จ์ด ์ฐจ์งํ๋ ๋ฆฌ์์ค ๋ชฉ๋ก์ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ํ๋ก๊ทธ๋จ์ด ํ ๋น๋ ๋ฆฌ์์ค ์ ํ์ ์ด๊ณผํ๋ฉด ์ด์ ์ฒด์ ๋ ๋ ์ด์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค.
"๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค ์ก์๋จน๋ ํ๋ก๊ทธ๋จ ๊ฐ์ผ๋๋ผ๊ณ ..."
"๊ทธ๋ฐ ๊ฒ์ ๋๋ค. ์ข์ ์์์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์๋์ผ๋ก ํด์ ๋๋ค๋ ๊ฒ์ ๋๋ค(์ด์ ์ฒด์ ์์ฒด๊ฐ ์ด๋ฅผ ์ํํจ)."
"๊ทธ๊ฒ ์ข์ ์์์ด๋ผ๋ฉด ๋์ ์์์ด ์๋ค๋ ๋ป์ธ๊ฐ์?"
"์ ํํ ๊ทธ๋ ์ต๋๋ค. ๋์ ์์์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๊ณ ์๋ค๋ฉด..."
"๊ทธ๋ฐ๋ฐ ์ ๊ฐ ๊ทธ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํฉ๋๊น?"
"๋ง์ ์๋ฒ ์์ฉ ํ๋ก๊ทธ๋จ์ด Java๋ก ์์ฑ๋์์ผ๋ฏ๋ก ์ ๋ฌด์ฉ์ผ๋ก ์์ฑํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ ๊ฐ ๋งํ๋ฏ์ด ์๋ฒ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒฝ์ฐ ์๋ฒ๋ ๋ฉฐ์น , ๋ช ์ฃผ, ๋ช ๋ฌ ๋์ ์ฌ์ง ์๊ณ ์คํ๋์ด์ผ ํฉ๋๋ค. ๋ฑ."
"์ฆ, ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ง ์์ผ๋ฉฐ ์ด๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋์ผ๋ก ํด์ ๋์ง ์๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค."
"์ ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฃจ์ 100๊ฐ์ ํ์ผ์ ์ด๊ณ ๋ซ์ง ์์ผ๋ฉด ๋ช ์ฃผ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฆฌ์์ค ์ ํ์ ๋๋ฌํ๊ณ ์ถฉ๋ํฉ๋๋ค."
"์์ ์ ์ธ ์ผ์ ๋ช ๋ฌ ๋์ ํ๊ธฐ์๋ ๋๋ฌด ๋ถ์กฑํฉ๋๋ค! ์ด๋ป๊ฒ ํ ์ ์์ต๋๊น?"
"์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค์๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ํน๋ณํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค close()
.
"๋ค์์ ํ์ผ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ด ๋ค์ ์๋ฃ๋๋ฉด ํ์ผ์ ๋ซ๋ ํ๋ก๊ทธ๋จ์ ์์ ๋๋ค. ์ฆ, ์ด์ ์ฒด์ ์ ๋ฆฌ์์ค๋ฅผ ํด์ ํฉ๋๋ค. ๋๋ต ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ํธ | ๋ฉ๋ชจ |
---|---|
|
ํ์ผ ๊ฒฝ๋ก์
๋๋ค. ํ์ผ ๊ฐ์ฒด ๊ฐ์ ธ์ค๊ธฐ: ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ํ์ผ์ ์ฐ๊ธฐ ํ์ผ ๋ซ๊ธฐ - ๋ฆฌ์์ค ํด์ |
"์... ๊ทธ๋์ ํ์ผ(๋๋ ๋ค๋ฅธ ์ธ๋ถ ๋ฆฌ์์ค) ์์
์ ๋ง์น ํ์๋ close()
์ธ๋ถ ๋ฆฌ์์ค์ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํฉ๋๋ค."
"์. ๋ชจ๋ ๊ฒ์ด ๊ฐ๋จํด ๋ณด์ ๋๋ค. ํ์ง๋ง ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ์์ธ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฉฐ ์ธ๋ถ ๋ฆฌ์์ค๊ฐ ํด์ ๋์ง ์์ต๋๋ค."
"๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๋งค์ฐ ๋์ฉ๋๋ค. ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?"
"๋ฉ์๋๊ฐ ํญ์ ํธ์ถ๋๋๋ก ํ๋ ค๋ฉด ์ฝ๋๋ฅผ - - ๋ธ๋ก์ผ๋ก ๋ํํ๊ณ ๋ธ๋ก ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐ close()
ํด์ผ ํฉ๋๋ค . ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.try
catch
finally
close()
finally
try
{
FileOutputStream output = new FileOutputStream(path);
output.write(1);
output.close();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
output.close();
}
"์... ๋ญ๊ฐ ์ด์ํด?"
"๋ง์ต๋๋ค. ์ด ์ฝ๋๋ ์ปดํ์ผ๋์ง ์์ต๋๋ค. output
๋ณ์๊ฐ ๋ธ๋ก ๋ด๋ถ์์ ์ ์ธ๋์ด ๋ธ๋ก try{}
์์ ๋ณด์ด์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค finally
.
์์ ํ์:
FileOutputStream output = new FileOutputStream(path);
try
{
output.write(1);
output.close();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
output.close();
}
"์ด์ ๋ค ๊ด์ฐฎ์?"
"๊ด์ฐฎ์ง๋ง FileOutputStream
๊ฐ์ฒด๋ฅผ โโ์์ฑํ ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์๋ํ์ง ์์ผ๋ฉฐ ์ด๋ ๋งค์ฐ ์ฝ๊ฒ ๋ฐ์ํ ์ ์์ต๋๋ค.
์์ ํ์:
FileOutputStream output = null;
try
{
output = new FileOutputStream(path);
output.write(1);
output.close();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
output.close();
}
"๊ทธ๋ฆฌ๊ณ ์ด์ ๋ชจ๋ ๊ฒ์ด ์๋ํฉ๋๊น?"
FileOutputStream
"์ฌ์ ํ ๋ช ๊ฐ์ง ๋นํ์ด ์์ต๋๋ค. ๋จผ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด output
๋ณ์๊ฐ null์ด ๋ฉ๋๋ค. ์ด ๊ฐ๋ฅ์ฑ์ ๋ธ๋ก์์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค finally
.
"๋์งธ, close()
๋ฉ์๋๋ ํญ์ ๋ธ๋ก์์ ํธ์ถ๋๋ฉฐ finally
์ด๋ try
๋ธ๋ก์์ ํ์ํ์ง ์์์ ์๋ฏธํฉ๋๋ค. ์ต์ข
์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
FileOutputStream output = null;
try
{
output = new FileOutputStream(path);
output.write(1);
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if (output!=null)
output.close();
}
catch
" ์๋ตํ ์ ์๋ ๋ธ๋ก์ ๊ณ ๋ คํ์ง ์์๋ 3์ค์ ์ฝ๋๊ฐ 10์ด ๋ฉ๋๋ค. ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ์ ์ด๊ณ 1์ ์ผ์ ๋ฟ์
๋๋ค."
"ํ์ฐ.. ๊ฒฐ๋ก ์ ์๋ฌ๋ค. ๋น๊ต์ ์ดํด๋ ๊ฐ์ง๋ง, ์ข ์ง๋ฃจํ์ง ์๋?"
"๊ทธ๋ ์ต๋๋ค. ๊ทธ๋์ Java ์ ์์๊ฐ ๊ตฌ๋ฌธ ์คํ์ ์ถ๊ฐํ์ฌ ์ฐ๋ฆฌ๋ฅผ ๋์์ต๋๋ค. ์ด์ ํ๋ก๊ทธ๋จ์ ํ์ด๋ผ์ดํธ ๋๋ ์ด ๊ฐ์๋ก ์ด๋ํ๊ฒ ์ต๋๋ค.
try
-with-resources
"7๋ฒ์งธ ๋ฒ์ ๋ถํฐ Java์๋ ์๋ก์ด try
-with-resources ๋ฌธ์ด ์์ต๋๋ค.
"๋ฉ์๋์ ๋ํ ํ์ ํธ์ถ ๋ฌธ์ ๋ฅผ ์ ํํ๊ฒ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค close()
."
"์ ๋งํ๊ฒ ๋ค๋ฆฐ๋ค!"
"์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๊ฐ๋จํด ๋ณด์ ๋๋ค.
try (ClassName name = new ClassName())
{
Code that works with the name variable
}
"๊ทธ๋์ ์ด๊ฒ์ try
์ง์ ์ ๋ ๋ค๋ฅธ ๋ณํ์
๋๊น ?"
"์. ํค์๋ ๋ค์ ๊ดํธ๋ฅผ ์ถ๊ฐํ ๋ค์ try
๊ดํธ ์์ ์ธ๋ถ ๋ฆฌ์์ค๊ฐ ์๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๊ดํธ ์์ ๊ฐ ๊ฐ์ฒด์ ๋ํด ์ปดํ์ผ๋ฌ๋ ์น์
finally
๊ณผ ๋ฉ์๋ ํธ์ถ์ ์ถ๊ฐํฉ๋๋ค close()
.
"๋ค์์ ๋๋ฑํ ๋ ๊ฐ์ง ์์ ๋๋ค.
๊ธด ์ฝ๋ | try-with-resources๊ฐ ํฌํจ๋ ์ฝ๋ |
---|---|
|
|
"๋ฉ์ง๋ค์! -with-resources๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ try
ํจ์ฌ ๋ ์งง๊ณ ์ฝ๊ธฐ ์ฝ์ต๋๋ค. ์ฝ๋๊ฐ ์ ์์๋ก ์คํ๋ ๊ธฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค."
"๋ง์์ ๋์
จ๋ค๋ ๋คํ์
๋๋ค. ๊ทธ๋ฐ๋ฐ -with-resources ๋ฌธ์ ์ถ๊ฐ catch
ํ๊ณ finally
์ฐจ๋จํ ์ ์์ต๋๋ค try
. ๋๋ ํ์ํ์ง ์์ ๊ฒฝ์ฐ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋์์ ์ฌ๋ฌ ๋ณ์
"๋์์ ์ฌ๋ฌ ํ์ผ์ ์ด์ด์ผ ํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ ์ ์์ต๋๋ค. ํ์ผ์ ๋ณต์ฌํ๋ค๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ํ์ผ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ํ์ผ์ ๋ ๊ฐ์ฒด๊ฐ ํ์ํฉ๋๋ค. .
"์ด ๊ฒฝ์ฐ try
-with-resources ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๊ทธ ์์ ํ๋๊ฐ ์๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ฝ๋๋ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถํด์ผ ํฉ๋๋ค. ์ด ๋ฌธ์ ์ผ๋ฐ์ ์ธ ๋ชจ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
try (ClassName name = new ClassName(); ClassName2 name2 = new ClassName2())
{
Code that works with the name and name2 variables
}
ํ์ผ ๋ณต์ฌ์ ์:
์งง์ ์ฝ๋ | ๊ธด ์ฝ๋ |
---|---|
|
|
"๊ธ์, ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ๋ฌด์์ ๋งํ ์ ์์ต๋๊น? try
-with-resources๋ ๋ฉ์ง ๊ฒ์
๋๋ค!"
"์ฐ๋ฆฌ๊ฐ ๋งํ ์ ์๋ ๊ฒ์ ๊ทธ๊ฒ์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค."
GO TO FULL VERSION