item 8 dodo4513 - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
- ์๋ฐ๋ ๋ ๊ฐ์ง ๊ฐ์ฒด ์๋ฉธ์๋ฅผ ์ ๊ณตํ๋ค. ๊ทธ ์ค finailzer๋ ์์ธกํ ์ ์๊ณ , ์ํฉ์ ๋ฐ๋ผ ์ํํ ์ ์์ด ์ผ๋ฐ์ ์ผ๋ก ๋ถํ์ํ๋ค. ๊ทธ๋์ ์๋ฐ 9์์๋ finalizer๋ฅผ ์ฌ์ฉ ์์ (deprecated) API๋ก ์ง์ ํ๊ณ cleaner๋ฅผ ๊ทธ ๋์์ผ๋ก ์๊ฐํ๋ค(ํ์ง๋ง ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ finalizer๋ฅผ ์ฌ์ ํ ์ฌ์ฉํ๋ค). cleaner๋ finalizer๋ณด๋ค๋ ๋ ์ํํ์ง๋ง, ์ฌ์ ํ ์์ธกํ ์ ์๊ณ , ๋๋ฆฌ๊ณ , ์ผ๋ฐ์ ์ผ๋ก ๋ถํ์ํ๋ค.
-
finalizer์ cleaner๋ ์ฆ์ ์ํ๋๋ค๋ ๋ณด์ฅ์ด ์๋ค. ๊ฐ์ฒด์ ์ ๊ทผํ ์ ์๊ฒ ๋ ํ finalizer๋ cleaner๊ฐ ์คํ๋๊ธฐ๊น์ง ์ผ๋ง๋ ๊ฑธ๋ฆด์ง ์ ์ ์๋ค.
์ฆ, finalizer์ cleaner๋ก๋ ์ ๋ ์คํ๋์ด์ผ ํ๋ ์์ ์ ์ ๋ ํ ์ ์๋ค.
ํํธ, cleaner๋ ์์ ์ ์ํํ ์ค๋ ๋๋ฅผ ์ ์ดํ ์ ์๋ค๋ ๋ฉด์์ ์กฐ๊ธ ๋ซ๋ค. ํ์ง๋ง ์ฌ์ ํ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํ๋๋ฉฐ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ํต์ ํ์ ์์ผ๋ ์ฆ๊ฐ ์ํ๋๋ฆฌ๋ผ๋ ๋ณด์ฅ์ ์๋ค. -
์๋ฐ ์ธ์ด ๋ช ์ธ๋ finalizer๋ cleaner์ ์ํ ์์ ๋ฟ ์๋๋ผ ์ํ ์ฌ๋ถ์กฐ์ฐจ ๋ณด์ฅํ์ง ์๋๋ค.
๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ ์์ ์ฃผ๊ธฐ์ ์๊ด์๋, ์ํ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์์ ํ๋ ์์ ์์๋ ์ ๋ finalizer๋ cleaner์ ์์กดํด์๋ ์ ๋๋ค.
-
finalizer ๋์ ์ค ๋ฐ์ํ ์์ธ๋ ๋ฌด์๋๋ฉฐ, ์ฒ๋ฆฌํ ์์ ์ด ๋จ์๋๋ผ๋ ๊ทธ ์๊ฐ ์ข ๋ฃ๋๋ค. ์ก์ง ๋ชปํ ์์ธ ๋๋ฌธ์ ํด๋น ๊ฐ์ฒด๋ ์์นซ ๋ง๋ฌด๋ฆฌ๊ฐ ๋ ๋ ์ํ๋ก ๋จ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ด์ฒ๋ผ ํผ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค ํ๋ค๋ฉด ์ด๋ป๊ฒ ๋์ํ ์ง ์์ธกํ ์ ์๋ค.
-
finalizer์ cleaner๋ gc์ ๊ด๋ จ๋ ์ฌ๊ฐํ ์ฑ๋ฅ ๋ฌธ์ ๋ ๋๋ฐํ๋ค.
-
finalizer๋ฅผ ์ฌ์ฉํ ํด๋์ค๋ finalizer ๊ณต๊ฒฉ์ ๋ ธ์ถ๋์ด ์ฌ๊ฐํ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์๋ ์๋ค. ๊ฐ์ฒด ์์ฑ์ ๋ง์ผ๋ ค๋ฉด ์์ฑ์์์ ์์ธ๋ฅผ ๋์ง๋ ๊ฒ๋ง์ผ๋ก ์ถฉ๋ถํ์ง๋ง, finalizer๊ฐ ์๋ค๋ฉด ๊ทธ๋ ์ง๋ ์๋ค. ์๋ํ๋ฉด ์์ฑ์๋ ์ง๋ ฌํ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์์ฑ๋๋ค ๋ง ๊ฐ์ฒด์ finalizer๊ฐ ํธ์ถ๋๊ณ , ์ด ์ผ๊ทธ๋ฌ์ง ๊ฐ์ฒด๋ฅผ ์ด์ฉํด ์๋๋ ํธ์ถํ ์ ์๋ ๋ฉ์๋๋ค์ ํธ์ถํ ์ ์๊ฒ ๋๋ค.
- ๊ทธ์ AutoCloseable์ ๊ตฌํํด์ฃผ๊ณ , ํด๋ผ์ด์ธํธ์์ ์ธ์คํด์ค๋ฅผ ๋ค ์ฐ๊ณ ๋๋ฉด close ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.
cleaner(์๋ฐ 8๊น์ง๋ finalizer)๋ ์์ ๋ง ์ญํ ์ด๋ ์ค์ํ์ง ์์ ๋ค์ดํฐ๋ธ ์์ ํ์์ฉ์ผ๋ก๋ง ์ฌ์ฉํ์.
๋ฌผ๋ก ์ด๋ฐ ๊ฒฝ์ฐ๋ผ๋ ๋ถํ์ค์ฑ๊ณผ ์ฑ๋ฅ ์ ํ์ ์ฃผ์ํด์ผ ํ๋ค.