item 8 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki

์•„์ดํ…œ8 finalizer์™€ cleaner ์‚ฌ์šฉ์„ ํ”ผํ•˜๋ผ

  • ์ž๋ฐ”๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐ์ฒด ์†Œ๋ฉธ์ž๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ ์ค‘ finailzer๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ณ , ์ƒํ™ฉ์— ๋”ฐ๋ผ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์–ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ์ž๋ฐ” 9์—์„œ๋Š” finalizer๋ฅผ ์‚ฌ์šฉ ์ž์ œ(deprecated) API๋กœ ์ง€์ •ํ•˜๊ณ  cleaner๋ฅผ ๊ทธ ๋Œ€์•ˆ์œผ๋กœ ์†Œ๊ฐœํ–ˆ๋‹ค(ํ•˜์ง€๋งŒ ์ž๋ฐ” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋„ finalizer๋ฅผ ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•œ๋‹ค). cleaner๋Š” finalizer๋ณด๋‹ค๋Š” ๋œ ์œ„ํ—˜ํ•˜์ง€๋งŒ, ์—ฌ์ „ํžˆ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๊ณ , ๋Š๋ฆฌ๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•˜๋‹ค.

์“ฐ๋ฉด ์•ˆ๋˜๋Š” ์ด์œ !

  1. finalizer์™€ cleaner๋Š” ์ฆ‰์‹œ ์ˆ˜ํ–‰๋œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๋‹ค. ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ ํ›„ finalizer๋‚˜ cleaner๊ฐ€ ์‹คํ–‰๋˜๊ธฐ๊นŒ์ง€ ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆด์ง€ ์•Œ ์ˆ˜ ์—†๋‹ค. ์ฆ‰, finalizer์™€ cleaner๋กœ๋Š” ์ œ๋•Œ ์‹คํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ์ž‘์—…์€ ์ ˆ๋Œ€ ํ•  ์ˆ˜ ์—†๋‹ค. ํ•œํŽธ, cleaner๋Š” ์ž์‹ ์„ ์ˆ˜ํ–‰ํ•  ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฉด์—์„œ ์กฐ๊ธˆ ๋‚ซ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ํ†ต์ œํ•˜์— ์žˆ์œผ๋‹ˆ ์ฆ‰๊ฐ ์ˆ˜ํ–‰๋˜๋ฆฌ๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค.

  2. ์ž๋ฐ” ์–ธ์–ด ๋ช…์„ธ๋Š” finalizer๋‚˜ cleaner์˜ ์ˆ˜ํ–‰ ์‹œ์ ๋ฟ ์•„๋‹ˆ๋ผ ์ˆ˜ํ–‰ ์—ฌ๋ถ€์กฐ์ฐจ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ ์ƒ์• ์ฃผ๊ธฐ์™€ ์ƒ๊ด€์—†๋Š”, ์ƒํƒœ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์—์„œ๋Š” ์ ˆ๋Œ€ finalizer๋‚˜ cleaner์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

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

  4. finalizer์™€ cleaner๋Š” gc์™€ ๊ด€๋ จ๋œ ์‹ฌ๊ฐํ•œ ์„ฑ๋Šฅ ๋ฌธ์ œ๋„ ๋™๋ฐ˜ํ•œ๋‹ค.

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

์ž์›์˜ ํ•ด์ œ๋Š” ๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ?

  • ๊ทธ์ € AutoCloseable์„ ๊ตฌํ˜„ํ•ด์ฃผ๊ณ , ํด๋ผ์ด์–ธํŠธ์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค ์“ฐ๊ณ  ๋‚˜๋ฉด close ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

ํ•ต์‹ฌ์ •๋ฆฌ

cleaner(์ž๋ฐ” 8๊นŒ์ง€๋Š” finalizer)๋Š” ์•ˆ์ „๋ง ์—ญํ• ์ด๋‚˜ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋„ค์ดํ‹ฐ๋ธŒ ์ž์› ํšŒ์ˆ˜์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์ž.

๋ฌผ๋ก  ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ผ๋„ ๋ถˆํ™•์‹ค์„ฑ๊ณผ ์„ฑ๋Šฅ ์ €ํ•˜์— ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ