"์๋ ํ์ธ์! ๊ฐ๋น์ง ์์ง์ ๋ํ ๋ ๋ค๋ฅธ ์์ ๊ตํ์ ์ฃผ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค."
์ด๋ฏธ ์๊ณ ์๋ฏ์ด Java ๋จธ์ ์์ฒด๋ ๊ฐ์ฒด๊ฐ ๋ถํ์ํด์ง๋ฉด ์ด๋ฅผ ๋ชจ๋ํฐ๋งํ์ฌ ์ญ์ ํฉ๋๋ค.
"๊ทธ๋. ๋๋ ๋ฆฌ์๊ฐ ์๊น ์๊ธฐํด์คฌ์ด. ์์ธํ ๊ฑด ๊ธฐ์ต์ด ์ ๋."
"์์์ด. ๊ทธ๋ผ ๋ค์ ํด๋ณด์."

"๊ฐ์ฒด๊ฐ ์์ฑ๋์๋ง์ JVM์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํฉ๋๋ค. ๊ฐ์ฒด์ ๋ํ ๊ด์ฌ์ ์ฐธ์กฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ํฐ๋ง๋ฉ๋๋ค. ๊ฐ๋น์ง ์์ง, ์ฆ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋ ์ ์ฐจ ์ค์ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค. ๊ฐ์ฒด. "
"๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํด ์กฐ๊ธ ๋ง์ํด ์ฃผ์ญ์์ค."
"์ข์ต๋๋ค. ๊ฐ๋น์ง ์์ง์ ๊ธฐ๋ณธ ์ค๋ ๋์์ ๋ฐ์ํ์ต๋๋ค. 5๋ถ๋ง๋ค ๋๋ ๋ ์์ฃผ. ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์์ผ๋ฉด Java ์์คํ ์ด ๋ชจ๋ ์ค๋ ๋๋ฅผ ์ผ์ ์ค๋จํ๊ณ ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค."
"ํ์ง๋ง ์ด ์ ๊ทผ ๋ฐฉ์์ ์ด์ ํฌ๊ธฐ๋์์ต๋๋ค. ์ฐจ์ธ๋ ๊ฐ๋น์ง ์์ง๊ธฐ๋ ๋ฐฐํ์์ ๋ณ๋์ ์ค๋ ๋์์ ์๋ํฉ๋๋ค. ์ด๋ฅผ ๋์ ๊ฐ๋น์ง ์์ง์ด๋ผ๊ณ ํฉ๋๋ค."
"๊ทธ๋ ๊ตฐ์. ๊ฐ์ฒด ์ญ์ ์ฌ๋ถ๋ ์ ํํ ์ด๋ป๊ฒ ๊ฒฐ์ ๋๋ ๊ฒ๋๊น?"
"๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ์๋ฅผ ์ธ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ทธ๋ค์ง ํจ๊ณผ์ ์ด์ง ์์ต๋๋ค. ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๊ฐ ์์ ์ ์์ง๋ง ๋ค๋ฅธ ๊ฐ์ฒด๋ ์ฐธ์กฐํ์ง ์์ต๋๋ค."
"๊ทธ๋์ Java๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. Java๋ ๊ฐ์ฒด๋ฅผ ๋๋ฌ ๊ฐ๋ฅํ ๊ฐ์ฒด์ ๋๋ฌ ๋ถ๊ฐ๋ฅํ ๊ฐ์ฒด๋ก ๋๋๋๋ค. ๊ฐ์ฒด๋ ๋ค๋ฅธ ๋๋ฌ ๊ฐ๋ฅํ(์ด์ ์๋) ๊ฐ์ฒด๊ฐ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ ๋๋ฌ ๊ฐ๋ฅํ(ํ์ฑ) ๊ฒ์ ๋๋ค. ๋๋ฌ ๊ฐ๋ฅ์ฑ์ ์ค๋ ๋์์ ๊ฒฐ์ ๋ฉ๋๋ค. ์คํ ์ค์ธ ์ค๋ ๋๋ ํญ์ ๋๋ฌ ๊ฐ๋ฅํ(ํ์ฑ) ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋ฉ๋๋ค. , ์๋ฌด๋ ์ธ๊ธํ์ง ์๋๋ผ๋."
"์ข์. ์ ๊ฒ ๊ฐ์."
"๋ถํ์ํ ๊ฐ์ฒด๋ฅผ ์ญ์ ํ๋ ์ค์ ๊ฐ๋น์ง ์์ง์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋์?"
"๊ฐ๋จํฉ๋๋ค. Java์์ ๋ฉ๋ชจ๋ฆฌ๋ ๊ด๋ก์ ๋ฐ๋ผ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ฉฐ ๊ฐ๋น์ง ์์ง ์๊ฐ์ด ๋๋ฉด ๋ชจ๋ ์ด์ ์๋(๋๋ฌํ ์ ์๋) ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ๋ณต์ฌ๋๊ณ ์ด์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ชจ๋ ํด์ ๋ฉ๋๋ค."
"ํฅ๋ฏธ๋ก์ด ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ฐธ์กฐ๋ฅผ ์ธ์ง ์์๋ ๋ฉ๋๋ค. ๋๋ฌ ๊ฐ๋ฅํ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ์ฐ๋ ๊ธฐ์ ๋๋ค."
"๊ทธ๊ฒ๋ณด๋ค ์กฐ๊ธ ๋ ๋ณต์กํฉ๋๋ค. Java ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์ฒด๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ง ๋ฒ์ฃผ๋ก ๋๋๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์๋ช ์ด ๊ธด(ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ ์ฒด ์๊ฐ ๋์ ์กด์ฌ) ์๋ช ์ด ์งง์(๋ฉ์๋์์ ํ์ํ๊ณ ยซ๋ก์ปฌ์ ์ํํ๋ ๋ฐ ํ์ํจ) ยป ์์ )."
"์ฅ์ ๊ฐ์ฒด๋ฅผ ์๋ช ์ด ์งง์ ๊ฐ์ฒด์ ๋ถ๋ฆฌํ์ฌ ์ ์งํ๋ ๊ฒ์ด ํจ์ฌ ๋ ํจ์จ์ ์ ๋๋ค. ์ด๋ฅผ ์ํด์๋ ๊ฐ์ฒด์ ์๋ช ์ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ง๋ จํด์ผ ํ์ต๋๋ค."
"๊ทธ๋์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ยซ์ธ๋ยป๋ก ๋๋์์ต๋๋ค. 1์ธ๋ ๊ฐ์ฒด, 2์ธ๋ ๊ฐ์ฒด ๋ฑ์ด ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋น์์ง ๋๋ง๋ค ์์ฑ ์นด์ดํฐ๊ฐ 1์ฉ ์ฆ๊ฐํฉ๋๋ค. ํน์ ๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ์ธ๋์ ์กด์ฌํ๋ฉด ์๋ช ์ด ๊ธด ๊ฒ์ผ๋ก ๊ธฐ๋ก๋ฉ๋๋ค."
"์ค๋๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ Java์ ๋งค์ฐ ๋ณต์กํ๊ณ ํจ์จ์ ์ธ ๋ถ๋ถ์ ๋๋ค. ๋ง์ ๋ถ๋ถ์ด ์ถ์ธกํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํด๋ฆฌ์คํฑ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ์ฌ์ฉ์์ ๋ง์ ๋ฃ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค."
"์๋ฏธ?"
"Java์๋ System.gc () ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถํ ์ ์๋ ๊ฐ๋น์ง ์์ง๊ธฐ( GC ) ๊ฐ์ฒด๊ฐ ์์ต๋๋ค ."
"๋ํ System.runFinalization()์ ์ฌ์ฉํ์ฌ ์ญ์ ํ ๊ฐ์ฒด์ finalize ๋ฉ์๋๋ฅผ ๊ฐ์ ๋ก ํธ์ถํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ค Java ์ค๋ช ์์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ ๊ฐ๋น์ง ์์ง์ด ์์๋๊ฑฐ๋ finalize ( ) ๋ฉ์๋๊ฐ ํธ์ถ๋ฉ๋๋ค. ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์ธ์ ํธ์ถํ ์ง, ๋ฌด์์ ํธ์ถํ ์ง ๊ฒฐ์ ํฉ๋๋ค. "
"์ฐ์! ์์์ค์ ๋ฐ๊ฐ์."
"๊ทธ๋ฌ๋ ๋ ๋ง์ ๊ฒ์ด ์์ต๋๋ค. ์์๋ค์ํผ Java์์ ์ผ๋ถ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํฉ๋๋ค. ์ด ์ฐธ์กฐ ๋คํธ์ํฌ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํด์ผ ํ๋์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค."
"๊ทธ๋ฆฌ๊ณ ๋ณด์ธ์. Java์๋ ์ด ํ๋ก์ธ์ค์ ์ํฅ์ ์ค ์ ์๋ ํน์ ์ฐธ์กฐ๊ฐ ์์ต๋๋ค. ํน์ ๋ํผ ํด๋์ค๊ฐ ์์ต๋๋ค. ๋ค์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค."
" SoftReference ๋ ์ํํธ ์ฐธ์กฐ์ ๋๋ค."
" WeakReference ๋ ์ฝํ ์ฐธ์กฐ์ ๋๋ค."
" PhantomReference ๋ ํฌํ ์ฐธ์กฐ์ ๋๋ค."
"์ด... ์ด๊ฑด ๋ด๋ถ ํด๋์ค, ์ค์ฒฉ ํด๋์ค, ์ค์ฒฉ ์ต๋ช ํด๋์ค, ๋ก์ปฌ ํด๋์ค๊ฐ ์๊ฐ๋๋ค์. ์ด๋ฆ์ ๋ค๋ฅด์ง๋ง ๋ฌด์์ ์ํ ๊ฒ์ธ์ง ๋ช ํํ์ง ์์ต๋๋ค."
"๋งํด๋ด, ์๋ฏธ๊ณ , ๋น์ ์ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋์๋ค. ์ด์ ๋น์ ์ ํด๋์ค ์ด๋ฆ ๋๋ฌธ์ ํ๋ฅผ ๋ด๋ฉฐ ๋งํ๊ธฐ๋ฅผ "๊ทธ๊ฒ๋ค์ ์ ๋ณด๊ฐ ์ถฉ๋ถํ์ง ์๊ณ , ํ๋์ ์ด๋ฆ(!)์ผ๋ก ์ด ํด๋์ค๊ฐ ๋ฌด์์ ํ๋์ง, ์ด๋ป๊ฒ, ๊ทธ๋ฆฌ๊ณ ์"."
"์์ฐ. ๋์น์ฑ์ง๋ ๋ชปํ๋๋ฐ. ๋๋ฌด ๋ปํ์์."
"์๊ฒ ์ต๋๋ค. ์ถฉ๋ถํฉ๋๋ค. SoftReferences์ ๋ํด ๋ง์๋๋ฆฌ๊ฒ ์ต๋๋ค."
"์ด๋ฌํ ์ฐธ์กฐ๋ ์บ์ฑ์ ์ํด ํน๋ณํ ์ค๊ณ๋์์ง๋ง ํ๋ก๊ทธ๋๋จธ์ ์ฌ๋์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค."
"๋ค์์ ์ด๋ฌํ ์ฐธ์กฐ์ ์์ ๋๋ค."
// Create a Cat object
Cat cat = new Cat();
// Create a soft reference to a Cat object
SoftReference<Cat> catRef = new SoftReference<Cat>(cat);
// Now only the catRef soft reference points at the object
cat = null;
// Now the ordinary cat variable also references the object
cat = catRef.get();
// Clear the soft reference
catRef.clear();
"๊ฐ์ฒด์ ๋ํ ์ ์ผํ ์ฐธ์กฐ๊ฐ ์ํํธ์ธ ๊ฒฝ์ฐ ๊ณ์ํด์ ์๋ํ๋ฉฐ '๋ถ๋๋ฝ๊ฒ ๋๋ฌํ ์ ์์'์ด๋ผ๊ณ ํฉ๋๋ค."
"๊ทธ๋ฌ๋! ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์์ผ๋ฉด ์ํํธ ์ฐธ์กฐ๋ก๋ง ์ฐธ์กฐ๋๋ ๊ฐ์ฒด๋ ๊ฐ๋น์ง ์์ง๊ธฐ์ ์ํด ์ญ์ ๋ ์ ์์ต๋๋ค. ๊ฐ์๊ธฐ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ถฉ๋ถํ์ง ์์ผ๋ฉด OutOfMemoryException ์ ๋ฐ์์ํค๊ธฐ ์ ์ ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ญ์ ํฉ๋๋ค. ์ํํธ ์ฐธ์กฐ์ ์ํด ์ฐธ์กฐ๋๊ณ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ค์ ์๋ํฉ๋๋ค."
"ํด๋ผ์ด์ธํธ ํ๋ก๊ทธ๋จ์ด ์๋ฒ ํ๋ก๊ทธ๋จ์์ ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ์์ฃผ ์์ฒญํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๋ฒ ํ๋ก๊ทธ๋จ์ SoftReference๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ ์ค ์ผ๋ถ๋ฅผ ์บ์ํ ์ ์์ต๋๋ค. ์ํํธ ์ฐธ์กฐ์ ์ํด ์๋ฉธ๋์ง ์์ ๊ฐ์ฒด๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ๋ง์ ๋ถ๋ถ์ ์ฐจ์งํ๋ฉด ๊ฐ๋น์ง ์์ง๊ธฐ๊ฐ ๊ฐ๋จํ ์ญ์ ํฉ๋๋ค. ๋ค. ์๋ฆ๋ค์!"
"๊ทธ๋. ๋๋ ์ข์ํ์ด."
"์, ํ ๊ฐ์ง ์์ ์ถ๊ฐ ์ฌํญ์ด ์์ต๋๋ค. SoftReference ํด๋์ค์๋ ๋ ๊ฐ์ง ๋ฉ์๋๊ฐ ์์ต๋๋ค. get() ๋ฉ์๋๋ SoftReference์์ ์ฐธ์กฐํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค . ๊ฐ์ฒด๊ฐ ๊ฐ๋น์ง ์์ง๊ธฐ์ ์ํด ์ญ์ ๋ ๊ฒฝ์ฐ get ( ) ๋ฉ์๋๊ฐ ๊ฐ์๊ธฐ null์ ๋ฐํํ๊ธฐ ์์ํฉ๋๋ค."
"๋ํ ์ฌ์ฉ์๋ clear() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ช ์์ ์ผ๋ก SoftReference๋ฅผ ์ง์ธ ์ ์์ต๋๋ค . ์ด ๊ฒฝ์ฐ SoftReference ๊ฐ์ฒด ๋ด๋ถ์ ์ฝํ ๋งํฌ๊ฐ ํ๊ดด๋ฉ๋๋ค."
"์ง๊ธ์ ์ฌ๊ธฐ๊น์ง์ ๋๋ค."
"ํฅ๋ฏธ๋ก์ด ์ด์ผ๊ธฐ ๊ณ ๋ง์์, Ellie. ์ ๋ง ์ฌ๋ฏธ์์์ด์."
GO TO FULL VERSION