Item 8. Finalizer & Cleaner

Finalizer와 Cleaner μ‚¬μš©μ„ ν”Όν•˜λΌ

Javaμ—λŠ” finalizer와 cleanerλΌλŠ” 두 가지 객체 μ†Œλ©Έμžκ°€ μ‘΄μž¬ν•œλ‹€. ν•˜μ§€λ§Œ 두 μ†Œλ©Έμž λͺ¨λ‘ μ˜ˆμΈ‘ν•  수 μ—†κ³ , 상황에 따라 μœ„ν—˜ν•  수 있기 λ•Œλ¬Έμ— μ‚¬μš©μ„ ν”Όν•΄μ•Ό ν•œλ‹€.

  • finalizer: Java 9λΆ€ν„° deprecated 됨

  • cleaner: Java 9λΆ€ν„° finalizerλ₯Ό λŒ€μ²΄ν•˜κΈ° μœ„ν•΄ λ„μž…λ˜μ—ˆμœΌλ‚˜ μ—¬μ „νžˆ μœ„ν—˜ν•˜κ³  μ˜ˆμΈ‘ν•  수 μ—†μŒ

이 두 μ†Œλ©ΈμžλŠ” C++의 destuctor와 λΉ„μŠ·ν•΄ λ³΄μ΄μ§€λ§Œ, λ‹€λ₯Έ κ°œλ…μ΄κΈ° λ•Œλ¬Έμ— λ‹€μŒκ³Ό 같은 차이점이 μ‘΄μž¬ν•œλ‹€.

  • C++: destructorλŠ” 객체의 생성을 ν•˜λ©΄ κΌ­ ν•„μš”ν•œ κ²ƒμœΌλ‘œ μžμ›μ„ νšŒμˆ˜ν•˜λŠ” 보편적인 방법

  • Java: 기본적으둜 가비지 컬렉터가 μžμ› 회수λ₯Ό λ‹΄λ‹Ήν•˜λ©°, finalizer와 cleanerλŠ” μ¦‰μ‹œ μˆ˜ν–‰λœλ‹€λŠ” 보μž₯이 μ—†μŒ

μ†Œλ©Έμžκ°€ μœ„ν—˜ν•œ 이유

μœ„μ—μ„œ μ„€λͺ…ν–ˆλ“―이 finalizer와 cleanerλŠ” μ¦‰μ‹œ μˆ˜ν–‰λœλ‹€λŠ” 보μž₯이 μ—†λ‹€. μœ„ 두 μ†Œλ©Έμžμ˜ μˆ˜ν–‰ μ—¬λΆ€λŠ” 가비지 μ»¬λ ‰ν„°μ˜ μ•Œκ³ λ¦¬μ¦˜μ— 따라 달라지기 λ•Œλ¬Έμ— μ˜ˆμΈ‘ν•  수 μ—†μœΌλ©° 가비지 컬렉터 κ΅¬ν˜„λ§ˆλ‹€ λ‹€λ₯΄λ‹€. λ•Œλ¬Έμ— ν…ŒμŠ€νŠΈ ν™˜κ²½μ—μ„œλŠ” μ •μƒμ μœΌλ‘œ λ™μž‘ν•˜μ§€λ§Œ, ν”„λ‘œλ•μ…˜ ν™˜κ²½μ—μ„œλŠ” μ˜ˆμƒμΉ˜ λͺ»ν•œ 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆλ‹€.

  • μ¦‰μ‹œ μˆ˜ν–‰ 미보μž₯: 가비지 μ»¬λ ‰ν„°μ˜ μ•Œκ³ λ¦¬μ¦˜μ— 따라 달라지기 λ•Œλ¬Έμ— μ¦‰μ‹œ μˆ˜ν–‰λ˜μ§€ μ•Šμ„ 수 있음

  • μ˜ˆμ™Έ 처리 문제: finalizer λ‚΄λΆ€μ—μ„œ λ°œμƒν•œ μ˜ˆμ™ΈλŠ” λ¬΄μ‹œλ˜λ©°, μ²˜λ¦¬ν•  μž‘μ—…μ΄ λ‚¨μ•„μžˆλ”λΌλ„ μˆ˜ν–‰μ΄ 쀑단됨(cleanerλŠ” ν•΄λ‹Ή λ¬Έμ œκ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ)

  • μ„±λŠ₯ 문제: 가비지 컬렉터가 μžλ™μœΌλ‘œ μˆ˜κ±°ν•˜λŠ” μ‹œκ°„μ— λΉ„ν•΄ 훨씬 였래 κ±Έλ¦Ό

  • λ³΄μ•ˆ 문제: 생성이 μ™„λ£Œλ˜μ§€ μ•Šμ€ 객체의 ν•˜μœ„ 클래슀의 finalizerκ°€ μˆ˜ν–‰λ  수 있음

finalizer와 cleaner의 μ‚¬μš©

μ•ˆμ „λ§ μ—­ν• 

λ§Œμ•½ νŒŒμΌμ΄λ‚˜ μŠ€λ ˆλ“œ λ“± μ’…λ£Œν•΄μ•Ό ν•  μžμ›μ„ μ†Œλ©Έμ‹œν‚€κΈ° μœ„ν•΄μ„ , μœ„μ˜ 두 μ†Œλ©Έμžλ₯Ό μ‚¬μš©ν•˜λŠ” 것보닀 AutoCloseable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” 것이 더 μ’‹λ‹€. 두 μ†Œλ©ΈμžλŠ” AutoCloseable μΈν„°νŽ˜μ΄μŠ€μ˜ close() λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜μ§€ μ•ŠλŠ” 것에 λŒ€λΉ„ν•œ μ•ˆμ „λ§ 역할을 ν•  수 μžˆλ‹€.

λ„€μ΄ν‹°λΈŒ ν”Όμ–΄

λ„€μ΄ν‹°λΈŒ ν”Όμ–΄λž€ 일반 μžλ°” 객체가 λ„€μ΄ν‹°λΈŒ λ©”μ„œλ“œλ₯Ό 톡해 μ ‘κ·Όν•˜λŠ” λ„€μ΄ν‹°λΈŒ 객체λ₯Ό λ§ν•œλ‹€. λ„€μ΄ν‹°λΈŒ κ°μ²΄λŠ” μžλ°” 객체가 μ•„λ‹ˆμ—¬μ„œ 가비지 컬렉터가 νšŒμˆ˜ν•˜μ§€ λͺ»ν•˜κΈ° λ•Œλ¬Έμ— finalizer와 cleanerλ₯Ό 직접 μ‚¬μš©ν•˜μ—¬ νšŒμˆ˜ν•˜λŠ” 것이 μ’‹λ‹€.

Last updated