CodeGym /ํ–‰๋™ /All lectures for KO purposes /Try-with-resources ๋ฌธ

Try-with-resources ๋ฌธ

All lectures for KO purposes
๋ ˆ๋ฒจ 1 , ๋ ˆ์Šจ 1138
์‚ฌ์šฉ ๊ฐ€๋Šฅ

1. ์™ธ๋ถ€ ์ž์›

Java ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ๋•Œ๋•Œ๋กœ Java ์‹œ์Šคํ…œ ์™ธ๋ถ€์˜ ์—”ํ„ฐํ‹ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋””์Šคํฌ์˜ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—”ํ„ฐํ‹ฐ๋ฅผ ์ผ๋ฐ˜์ ์œผ๋กœ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๋ฆฌ์†Œ์Šค๋Š” Java ์‹œ์Šคํ…œ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋œ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ƒํ˜ธ ์ž‘์šฉ์€ ๋‹ค์Œ ์ฒด๊ณ„๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

Try-with-resources ๋ฌธ

๋ฆฌ์†Œ์Šค ์ถ”์ 

์šด์˜ ์ฒด์ œ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ์—„๊ฒฉํ•˜๊ฒŒ ์ถ”์ ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๊ณต์œ  ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์€ ํ•ด๋‹น ํŒŒ์ผ์„ ๋ณ€๊ฒฝ(๋˜๋Š” ์‚ญ์ œ)ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด ์›์น™์€ ํŒŒ์ผ์— ๊ตญํ•œ๋˜์ง€ ์•Š์ง€๋งŒ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ๋ฆฌ์†Œ์Šค๋ฅผ ํš๋“ ๋ฐ/๋˜๋Š” ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ธฐ๋Šฅ(API)์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ ์ด๋ฅผ ํš๋“ํ•œ ํ”„๋กœ๊ทธ๋žจ๋งŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๊ฐ€ ๋ฌด๋ฃŒ์ด๋ฉด ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋ฌด์‹ค์—์„œ ์ปคํ”ผ ๋จธ๊ทธ๋ฅผ ๊ณต์œ ํ•œ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๋ˆ„๊ตฐ๊ฐ€ ๋จธ๊ทธ์ž”์„ ๊ฐ€์ ธ๊ฐ€๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋” ์ด์ƒ ๋จธ๊ทธ์ž”์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋‹จ ๋จธ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์”ป์–ด์„œ ์ œ์ž๋ฆฌ์— ๋„ฃ์œผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ๋‹ค์‹œ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์Šค๋‚˜ ์ง€ํ•˜์ฒ ์˜ ์ขŒ์„ ์ƒํ™ฉ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค. ์ž๋ฆฌ๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ํƒˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ขŒ์„์ด ์ ์œ ๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ์ขŒ์„์„ ์ฐจ์ง€ํ•œ ์‚ฌ๋žŒ์ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค ํ™•๋ณด .

Java ํ”„๋กœ๊ทธ๋žจ์ด ๋””์Šคํฌ์˜ ํŒŒ์ผ ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค Java ์‹œ์Šคํ…œ์€ ์šด์˜ ์ฒด์ œ์— ๋…์  ์•ก์„ธ์Šค๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค๊ฐ€ ๋น„์–ด ์žˆ์œผ๋ฉด Java ์‹œ์Šคํ…œ์ด ๋ฆฌ์†Œ์Šค๋ฅผ ํš๋“ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ผ ์ž‘์—…์„ ๋งˆ์นœ ํ›„์—๋Š” ์ด ๋ฆฌ์†Œ์Šค(ํŒŒ์ผ)๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Œ์„ ์šด์˜ ์ฒด์ œ์— ์•Œ๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณ„์† ๋ณด์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ๋Š” ์‹คํ–‰ ์ค‘์ธ ๊ฐ ํ”„๋กœ๊ทธ๋žจ์ด ์ฐจ์ง€ํ•˜๋Š” ๋ฆฌ์†Œ์Šค ๋ชฉ๋ก์„ ์œ ์ง€ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ํ• ๋‹น๋œ ๋ฆฌ์†Œ์Šค ์ œํ•œ์„ ์ดˆ๊ณผํ•˜๋ฉด ์šด์˜ ์ฒด์ œ๋Š” ๋” ์ด์ƒ ์ƒˆ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹์€ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ํ•ด์ œ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์šด์˜ ์ฒด์ œ ์ž์ฒด์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ).

๋‚˜์œ ์†Œ์‹์€ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ(๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Java๋กœ ์ž‘์„ฑ๋˜๋Š” ๊ฒฝ์šฐ) ์„œ๋ฒ„๊ฐ€ ์ค‘๋‹จ ์—†์ด ๋ฉฐ์น , ๋ช‡ ์ฃผ, ๋ช‡ ๋‹ฌ ๋™์•ˆ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•˜๋ฃจ์— 100๊ฐœ์˜ ํŒŒ์ผ์„ ์—ด๊ณ  ๋‹ซ์ง€ ์•Š์œผ๋ฉด ๋ช‡ ์ฃผ ํ›„์— ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฆฌ์†Œ์Šค ์ œํ•œ์— ๋„๋‹ฌํ•˜๊ณ  ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์•ˆ์ •์ ์ธ ์ž‘์—…์˜ ๋ช‡ ๋‹ฌ์— ํ›จ์”ฌ ๋ชป ๋ฏธ์น˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


2. close()๋ฐฉ๋ฒ•

์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค์—๋Š” ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค close().

์•„๋ž˜์—์„œ ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ์— ๋ฌด์–ธ๊ฐ€๋ฅผ ์“ด ๋‹ค์Œ ์™„๋ฃŒ๋˜๋ฉด ํŒŒ์ผ์„ ๋‹ซ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์šด์˜ ์ฒด์ œ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.

์•”ํ˜ธ ๋ฉ”๋ชจ
String path = "c:\\projects\\log.txt";
FileOutputStream output = new FileOutputStream(path); output.write(1);
output.close();
ํŒŒ์ผ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
ํŒŒ์ผ ๊ฐœ์ฒด ๊ฐ€์ ธ์˜ค๊ธฐ: ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
ํŒŒ์ผ์— ์“ฐ๊ธฐ
ํŒŒ์ผ ๋‹ซ๊ธฐ - ๋ฆฌ์†Œ์Šค ํ•ด์ œ

ํŒŒ์ผ(๋˜๋Š” ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค)๋กœ ์ž‘์—…ํ•œ ํ›„์—๋Š” close()์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค์— ์—ฐ๊ฒฐ๋œ ๊ฐœ์ฒด์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์™ธ

๋ชจ๋“  ๊ฒƒ์ด ๊ฐ„๋‹จํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์™ธ๋ถ€ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๋งค์šฐ ๋‚˜์ฉ๋‹ˆ๋‹ค.

๋ฉ”์„œ๋“œ๊ฐ€ ํ•ญ์ƒ ํ˜ธ์ถœ ๋˜๋„๋ก ํ•˜๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ - - ๋ธ”๋ก์œผ๋กœ ๋ž˜ํ•‘ํ•˜๊ณ  ๋ธ”๋ก ์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ close()ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค . ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.trycatchfinallyclose()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();
}

์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋Š” ๋ธ”๋ก์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•„๋„ catch3์ค„์˜ ์ฝ”๋“œ๊ฐ€ 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๊ฐ€ ํฌํ•จ๋œ ์ฝ”๋“œ
FileOutputStream output = null;

try
{
   output = new FileOutputStream(path);
   output.write(1);
}
finally
{
   if (output != null)
   output.close();
}
try(FileOutputStream output = new FileOutputStream(path))
{
   output.write(1);
}

-with-resources๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š” tryํ›จ์”ฌ ์งง๊ณ  ์ฝ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ ์„์ˆ˜๋ก ์˜คํƒ€๋‚˜ ๊ธฐํƒ€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ -with-resources ๋ฌธ ์— ๋ธ”๋ก์„ catch์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๋˜๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.finallytry



4. ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜

๊ทธ๋Ÿฐ๋ฐ ๋™์‹œ์— ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์—ด์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ์›๋ณธ ํŒŒ์ผ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ํŒŒ์ผ์˜ ๋‘ ๊ฐœ์ฒด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ try-with-resources ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ ์•ˆ์— ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ์—ฌ๋Ÿฌ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ง„์ˆ ์˜ ์ผ๋ฐ˜์ ์ธ ๋ชจ์Šต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

try (ClassName name = new ClassName(); ClassName2 name2 = new ClassName2())
{
   Code that works with the name and name2 variables
}

ํŒŒ์ผ ๋ณต์‚ฌ์˜ ์˜ˆ:

๊ธด ์ฝ”๋“œ ์งง์€ ์ฝ”๋“œ
String src = "c:\\projects\\log.txt";
String dest = "c:\\projects\\copy.txt";

FileInputStream input = null;
FileOutputStream output = null;

try
{
   input = new FileInputStream(src);
   output = new FileOutputStream(dest);

   byte[] buffer = input.readAllBytes();
   output.write(buffer);
}
finally
{
   if (input != null)
      input.close();
   if (output != null)
      output.close();
}
String src = "c:\\projects\\log.txt";
String dest = "c:\\projects\\copy.txt";

try(FileInputStream input = new FileInputStream(src);

FileOutputStream output = new FileOutputStream(dest))
{
   byte[] buffer = input.readAllBytes();
   output.write(buffer);
}

๊ธ€์Ž„, ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? 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์—๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋งŽ์€ ํด๋ž˜์Šค๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION