Effective Java 3/E
์์ดํ 8:finalizer์ cleaner ์ฌ์ฉ์ ํผํ๋ผ
1. ์๋ฐ์ ๋ ๊ฐ์ง ๊ฐ์ฒด ์๋ฉธ์
- finalizer(deprecated)
- ์์ธกํ ์ ์๊ณ ์ํฉ์ ๋ฐ๋ผ ์ํํ ์ ์์. ( ์ผ๋ฐ์ ์ผ๋ก ๋ถํ์ํจ. )
- ์ค๋์, ๋ฎ์ ์ฑ๋ฅ, ์ด์์ฑ ๋ฌธ์ ์ ์์ธ์ด ๋๊ธฐ๋ํจ
- cleaner
- Java 9 ์์ finalizer ๋์์ผ๋ก ์๊ฐ๋ API
- finalizer ๋ณด๋ค๋ ๋ ์ํํ์ง๋ง, ์ฌ์ ํ ์์ธกํ ์ ์๊ณ , ๋๋ฆฌ๊ณ , ๋ถํ์ํ๋ค.
2. finalizer์ cleaner ์ฌ์ฉ์ ํผํด์ผํ๋ ์ด์
a. finalizer์ cleaner๋ ์ํ ์์ ๋ฐ ์ํ ์ฌ๋ถ์ ๋ํ ๋ณด์ฅ์ด ์๋ค.
- ์ํ ์์ ์ด GC ์๊ณ ๋ฆฌ์ฆ์ ๋ฌ๋ ค์์, ๊ตฌํ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฆ.
- finalizer ์ฐ๋ ๋๋ ๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ์.
-> ๋๊ฐ์ง API๋ก ์ ๋ ์คํ๋์ด์ผ ํ๋ ์์ ์ ์ ๋ ํ ์ ์๋ค.
- ์ ๊ทผํ ์ ์๋ ์ผ๋ถ ๊ฐ์ฒด์ ๋ธ๋ฆฐ ์ข ๋ฃ ์์ ์ ์ ํ ์ํํ์ง ๋ชปํ ์ฑ ํ๋ก๊ทธ๋จ์ด ์ค๋จ๋ ์ ๋ ์์.
-> ์ํ ์ฌ๋ถ๋ ๋ณด์ฅํ์ง ๋ชปํ๋ค. ์ํ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์์ ํ๋ ์์ ์์ ์ ๋๋ก ์์กดํ๋ฉด ์๋จ.
b. finalizer ๋์ ์ค ๋ฐ์ํ ์์ธ๋ ๋ฌด์๋๋ฉฐ, ์ฒ๋ฆฌํ ์์ ์ด ๋จ์๋๋ผ๋ ๊ทธ ์๊ฐ ์ข ๋ฃ๋๋ค.
- ๋ณดํต์ ๊ฒฝ์ฐ ์ก์ง ๋ชปํ ์์ธ๊ฐ ์ค๋ ๋๋ฅผ ์ค๋จ ์ํค๊ณ , ์คํ ์ถ์ ๋ด์ญ์ ์ถ๋ ฅํ๊ฒ ์ง๋ง, finalizer์์ ์ผ์ด๋๋ค๋ฉด ๊ฒฝ๊ณ ์กฐ์ฐจ ์ถ๋ ฅํ์ง ์๋๋ค. ( cleaner๋ฅผ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ ์ ์ค๋ ๋๋ฅผ ํต์ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.) ์ดํ ํผ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค๋ฉด ์์ธก ๋ถ๊ฐ๋ฅํ ์ํฉ์ด ๋ฐ์ํ๋ค.
c. finalizer์ cleaner๋ ์ฌ๊ฐํ ์ฑ๋ฅ๋ฌธ์ ๋ ๋๋ฐํ๋ค.
AutoCloseable ๊ฐ์ฒด๋ฅผ ์์ฑํด GC ์๊ฑฐ์๊ฐ : 12ns
finalizer ์๊ฑฐ์๊ฐ : 550ns -> GC์ ํจ์จ์ ๋จ์ด๋จ๋ฆฐ๋ค.
d. finalizer ๊ณต๊ฒฉ์ ๋ ธ์ถ๋์ด ์ฌ๊ฐํ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์๋ ์๋ค.
์์ฑ์๋ ์ง๋ ฌํ ๊ณผ์ ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ์์ฑ๋๋ค ๋ง ๊ฐ์ฒด์์ ์
์์ ์ธ ํ์ ํด๋์ค์ finalizer๊ฐ ์ํ๋ ์ ์๋ค.
์ผ๊ทธ๋ฌ์ง ๊ฐ์ฒด -> ์ ์ด์ ํ์ฉ๋์ง ์์์ ์์
์ํ ๊ฐ๋ฅ
๊ฐ์ฒด ์์ฑ์ ๋ง์ผ๋ ค๋ฉด ์์ฑ์์์ ์์ธ๋ฅผ ๋์ง๋ฉด ๋๋๋ฐ, finalizer๊ฐ ์์ผ๋ฉด ๊ทธ๋ ์ง ์๋ค.
final์ด ์๋ ํด๋์ค๋ฅผ finalizer ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ฐฉ์ดํ๋ ๋ฐฉ๋ฒ์๋ฌด์ผ๋ ํ์ง ์๋ finalize ๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ final๋ก ์ ์ธ (ํ์ํด๋์ค๊ฐ ์๋ง๋ค์ด์ง)
3. ์์์ ๋ฐ๋ฉํ๋ ๋ฐฉ๋ฒ
AutoClosable์ ๊ตฌํํด์ฃผ๊ณ , ํด๋ผ์ด์ธํธ์์ ์ธ์คํด์ค๋ฅผ ๋ค ์ฐ๊ณ ๋๋ฉด close ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ์์ธ๊ฐ ๋ฐ์ํด๋ ์ ์ข ๋ฃ ๋๋๋ก try-with-resources๋ฅผ ์ฌ์ฉํ๋ค
4. finalizer, cleaner์ ์ฐ์์
a. ์์์ ์์ ์๊ฐ close() ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์๋ ๊ฒ์ ๋๋นํ ์์ ๋ง ์ญํ
์์ ๋ง ์ญํ ์ finalizer๋ฅผ ์์ฑํ ๋ ๊ทธ๋ด๋งํ ๊ฐ์ด์น๊ฐ ์๋์ง ๊ณ ๋ฏผํ์
์๋ฐ๋ผ์ด๋ธ๋ฌ๋ฆฌ : FileInputStream, FileOutputStream, ThreadPoolExecutor
b. ๋ค์ดํฐ๋ธ ํผ์ด(native peer)์ ์ฐ๊ฒฐ๋ ๊ฐ์ฒด
๋ค์ดํฐ๋ธ ํผ์ด = ์ผ๋ฐ ์๋ฐ ๊ฐ์ฒด๊ฐ ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํตํด ๊ธฐ๋ฅ์ ์์ํ ๋ค์ดํฐ๋ธ ๊ฐ์ฒด์๋ฐ ๊ฐ์ฒด๊ฐ ์๋๋ผ GC๊ฐ ์กด์ฌ๋ฅผ ์์ง ๋ชปํ๋ค.
์ฑ๋ฅ ์ ํ๋ฅผ ๊ฐ๋นํ ์ ์๊ณ , ๋ค์ดํฐ๋ธ ํผ์ด๊ฐ ์ฌ๊ฐํ ์์์ ๊ฐ๊ณ ์์ง ์์ ๊ฒฝ์ฐ์ ์ ๋นํ๋ค.์ฆ์ ํ์ํด์ผํ๋ค๋ฉด .close()๋ฅผ ์ฌ์ฉํ์