1. ์ธ๋ถ ์์
Java ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ๋๋๋ก Java ์์คํ ์ธ๋ถ์ ์ํฐํฐ์ ์ํธ ์์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์คํฌ์ ํ์ผ์ด ์์ต๋๋ค. ์ด๋ฌํ ์ํฐํฐ๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ์ธ๋ถ ๋ฆฌ์์ค๋ผ๊ณ ํฉ๋๋ค. ๋ด๋ถ ๋ฆฌ์์ค๋ Java ์์คํ ๋ด๋ถ์์ ์์ฑ๋ ๊ฐ์ฒด์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ํธ ์์ฉ์ ๋ค์ ์ฒด๊ณ๋ฅผ ๋ฐ๋ฆ ๋๋ค.
๋ฆฌ์์ค ์ถ์
์ด์ ์ฒด์ ๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค๋ฅผ ์๊ฒฉํ๊ฒ ์ถ์ ํ๊ณ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์์ ๋ฆฌ์์ค์ ๋ํ ๊ณต์ ์ก์ธ์ค๋ฅผ ์ ์ดํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ ํ๋ก๊ทธ๋จ์ด ํ์ผ์ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ํด๋น ํ์ผ์ ๋ณ๊ฒฝ(๋๋ ์ญ์ )ํ ์ ์์ต๋๋ค. ์ด ์์น์ ํ์ผ์ ๊ตญํ๋์ง ์์ง๋ง ๊ฐ์ฅ ์ฝ๊ฒ ์ดํดํ ์ ์๋ ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด์ ์ฒด์ ์๋ ํ๋ก๊ทธ๋จ์ด ๋ฆฌ์์ค๋ฅผ ํ๋ ๋ฐ/๋๋ ํด์ ํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ(API)์ด ์์ต๋๋ค. ๋ฆฌ์์ค๊ฐ ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ์ด๋ฅผ ํ๋ํ ํ๋ก๊ทธ๋จ๋ง ์์ ํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค๊ฐ ๋ฌด๋ฃ์ด๋ฉด ๋ชจ๋ ํ๋ก๊ทธ๋จ์์ ๋ฆฌ์์ค๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ฌ๋ฌด์ค์์ ์ปคํผ ๋จธ๊ทธ๋ฅผ ๊ณต์ ํ๋ค๊ณ ์์ํด ๋ณด์ญ์์ค. ๋๊ตฐ๊ฐ ๋จธ๊ทธ์์ ๊ฐ์ ธ๊ฐ๋ฉด ๋ค๋ฅธ ์ฌ๋๋ค์ ๋ ์ด์ ๋จธ๊ทธ์์ ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ผ๋จ ๋จธ๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ ์ป์ด์ ์ ์๋ฆฌ์ ๋ฃ์ผ๋ฉด ๋๊ตฌ๋ ๋ค์ ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค. ๋ฒ์ค๋ ์งํ์ฒ ์ ์ข์ ์ํฉ๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์๋ฆฌ๊ฐ ๋น์ด ์์ผ๋ฉด ๋๊ตฌ๋ ํ ์ ์์ต๋๋ค. ์ข์์ด ์ ์ ๋ ๊ฒฝ์ฐ ํด๋น ์ข์์ ์ฐจ์งํ ์ฌ๋์ด ๊ด๋ฆฌํฉ๋๋ค.
์ธ๋ถ ๋ฆฌ์์ค ํ๋ณด .
Java ํ๋ก๊ทธ๋จ์ด ๋์คํฌ์ ํ์ผ ์์ ์ ์์ํ ๋๋ง๋ค Java ์์คํ ์ ์ด์ ์ฒด์ ์ ๋ ์ ์ก์ธ์ค๋ฅผ ์์ฒญํฉ๋๋ค. ๋ฆฌ์์ค๊ฐ ๋น์ด ์์ผ๋ฉด Java ์์คํ ์ด ๋ฆฌ์์ค๋ฅผ ํ๋ํฉ๋๋ค.
๊ทธ๋ฌ๋ ํ์ผ ์์ ์ ๋ง์น ํ์๋ ์ด ๋ฆฌ์์ค(ํ์ผ)๋ฅผ ํด์ ํด์ผ ํฉ๋๋ค. ์ฆ, ๋ ์ด์ ํ์ํ์ง ์์์ ์ด์ ์ฒด์ ์ ์๋ ค์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์์ ๋ฆฌ์์ค๋ฅผ ๊ณ์ ๋ณด์ ํ๊ฒ ๋ฉ๋๋ค.
์ด์ ์ฒด์ ๋ ์คํ ์ค์ธ ๊ฐ ํ๋ก๊ทธ๋จ์ด ์ฐจ์งํ๋ ๋ฆฌ์์ค ๋ชฉ๋ก์ ์ ์ง ๊ด๋ฆฌํฉ๋๋ค. ํ๋ก๊ทธ๋จ์ด ํ ๋น๋ ๋ฆฌ์์ค ์ ํ์ ์ด๊ณผํ๋ฉด ์ด์ ์ฒด์ ๋ ๋ ์ด์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ์ง ์์ต๋๋ค.
์ข์ ์์์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฉด ๋ชจ๋ ๋ฆฌ์์ค๊ฐ ์๋์ผ๋ก ํด์ ๋๋ค๋ ๊ฒ์ ๋๋ค(์ด์ ์ฒด์ ์์ฒด์์ ์ด ์์ ์ ์ํํจ).
๋์ ์์์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ ๊ฒฝ์ฐ(๊ทธ๋ฆฌ๊ณ ๋ง์ ์๋ฒ ์ ํ๋ฆฌ์ผ์ด์ ์ด Java๋ก ์์ฑ๋๋ ๊ฒฝ์ฐ) ์๋ฒ๊ฐ ์ค๋จ ์์ด ๋ฉฐ์น , ๋ช ์ฃผ, ๋ช ๋ฌ ๋์ ์คํ๋ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ฃจ์ 100๊ฐ์ ํ์ผ์ ์ด๊ณ ๋ซ์ง ์์ผ๋ฉด ๋ช ์ฃผ ํ์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฆฌ์์ค ์ ํ์ ๋๋ฌํ๊ณ ์ถฉ๋ํฉ๋๋ค. ๊ทธ๊ฒ์ ์์ ์ ์ธ ์์ ์ ๋ช ๋ฌ์ ํจ์ฌ ๋ชป ๋ฏธ์น๋ ๊ฒ์ ๋๋ค.
2. close()
๋ฐฉ๋ฒ
์ธ๋ถ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ ํด๋์ค์๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ํน๋ณํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค 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์ ์์ฑํ์ต๋๋ค. ์กฐ๊ธ ๋ฒ๊ฑฐ๋กญ์ง ์๋์?
3. try
๋ฆฌ์์ค์ ํจ๊ป
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์์ Java์ ์ ์์๋ ์ฐ๋ฆฌ์๊ฒ ์ฝ๊ฐ์ ๊ตฌ๋ฌธ ์คํ์ ๋ฟ๋ฆฌ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. 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
4. ๋์์ ์ฌ๋ฌ ๋ณ์
๊ทธ๋ฐ๋ฐ ๋์์ ์ฌ๋ฌ ํ์ผ์ ์ด์ด์ผ ํ๋ ์ํฉ์ด ์์ฃผ ๋ฐ์ํ ์ ์์ต๋๋ค. ํ์ผ์ ๋ณต์ฌํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ์๋ณธ ํ์ผ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ ํ์ผ์ ๋ ๊ฐ์ฒด๊ฐ ํ์ํฉ๋๋ค.
์ด ๊ฒฝ์ฐ try
-with-resources ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๊ทธ ์์ ํ๋๊ฐ ์๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ์ฝ๋๋ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถํด์ผ ํฉ๋๋ค. ์ด ์ง์ ์ ์ผ๋ฐ์ ์ธ ๋ชจ์ต์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
try (ClassName name = new ClassName(); ClassName2 name2 = new ClassName2())
{
Code that works with the name and name2 variables
}
ํ์ผ ๋ณต์ฌ์ ์:
๊ธด ์ฝ๋ | ์งง์ ์ฝ๋ |
---|---|
|
|
๊ธ์, ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ๋ฌด์์ ๋งํ ์ ์์ต๋๊น? try
-with-resources๋ ๋ฉ์ง ๊ฒ์
๋๋ค!
5. AutoCloseable
์ธํฐํ์ด์ค
ํ์ง๋ง ๊ทธ๊ฒ ๋ค๊ฐ ์๋๋๋ค. ์ฃผ์ ๊น์ ๋ ์๋ ์ฆ์ ์ด ์ง์ ์ด ์ ์ฉ๋ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ ํจ์ ์ ์ฐพ๊ธฐ ์์ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ try
ํด๋์ค์ ๋ฉ์๋๊ฐ ์๋ ๊ฒฝ์ฐ -with-resources ๋ฌธ์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น close()
? ๊ธ์, ์๋ฌด ๊ฒ๋ ํธ์ถ๋์ง ์๋๋ค๊ณ ๊ฐ์ ํ์ญ์์ค. ๋ฐฉ๋ฒ๋, ๋ฌธ์ ๋ ์์ต๋๋ค.
๊ทธ๋ฌ๋ try
ํด๋์ค์ ์ฌ๋ฌ close()
๋ฉ์๋๊ฐ ์๋ ๊ฒฝ์ฐ -with-resources ๋ฌธ์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น? ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์๊ฒ ์ ๋ฌํ ์ธ์๊ฐ ํ์ํฉ๋๊น? ํด๋์ค์ close()
๋งค๊ฐ๋ณ์๊ฐ ์๋ ๋ฉ์๋๊ฐ ์๋์?
๋๋ ๋น์ ์ด ์ด๋ฌํ ์ง๋ฌธ๋ค๊ณผ ์๋ง๋ ์ฌ์ ํ ๋ค๋ฅธ ์ง๋ฌธ๋ค์ ์ ๋ง๋ก ์ค์ค๋ก์๊ฒ ๋ฌผ์ด๋ดค๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด Java ์์ฑ์๋ ๋งค๊ฐ ๋ณ์๊ฐ ์๋ AutoCloseable
๋จ ํ๋์ ๋ฉ์๋๋ง ์๋ ์ด๋ผ๋ ํน์ ์ธํฐํ์ด์ค๋ฅผ ๊ณ ์ํ์ต๋๋ค .close()
๋ํ -with-resources ๋ฌธ ์์ ๊ตฌํํ๋ ํด๋์ค์ ๊ฐ์ฒด๋งAutoCloseable
๋ฆฌ์์ค๋ก ์ ์ธํ ์ ์๋ค๋ ์ ํ์ ์ถ๊ฐํ์ต๋๋ค . try
๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ฌํ ๊ฐ์ฒด์๋ ํญ์ ๋งค๊ฐ close()
๋ณ์๊ฐ ์๋ ๋ฉ์๋๊ฐ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ -with-resources ๋ฌธ์ด ํด๋์ค์ ๋งค๊ฐ ๋ณ์๊ฐ ์๋ ์์ฒด ๋ฉ์๋๊ฐ ์์ง๋ง ๊ตฌํํ์ง ์๋ try
๊ฐ์ฒด๋ฅผ ๋ฆฌ์์ค๋ก ์ ์ธํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ญ๋๊น ?close()
AutoCloseable
๋์ ์์: ์ ๋ต์ ์๋์ค์
๋๋ค. ํด๋์ค๋ AutoCloseable
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
ํฌ์์: Java์๋ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๋ง์ ํด๋์ค๊ฐ ์์ผ๋ฏ๋ก ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์๋ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
GO TO FULL VERSION