Dog dog = new Dog()
dog.Bark()
์ด์๋๋ฐ ์ฌ๊ธฐ์ new ์ฐ์ฐ์๋ฅผ ์์จ์ ๋ฐ์์ฒ๋ผ๋งํ๋๊ฑฐ๋
์ด๋ค์ฐจ์ด์ธ๊ฐ์?
Dog dog
dog.Bark()
dog.Bark()
์ด์๋๋ฐ ์ฌ๊ธฐ์ new ์ฐ์ฐ์๋ฅผ ์์จ์ ๋ฐ์์ฒ๋ผ๋งํ๋๊ฑฐ๋
์ด๋ค์ฐจ์ด์ธ๊ฐ์?
Dog dog
dog.Bark()
dog์ Dogํ์ ์ ํ ๋น ์ํด์ฃผ๋ฉด ๋น ๊ป๋ฐ๊ธฐ dog๋ฅผ ํธ์ถํ ๋ ์ต์ ์ ์ด ํฐ์ง์ง NullpointerException
์ ๋ํฐ์์ ๋ค๋ฅธํด๋์ค ์ฐธ์กฐํ ๋ ์์ฑ์์์ด ์ฌ์ฉํด๋ ๋๋๋ผ๊ณ ์.. ใ ใ ๋๋ฌด์ด๋ ต๋ค์
๋ค๋ฅธ ํด๋์ค๋ฅผ ์ฐธ์กฐํ์ผ๋๊น ใ ใ
new๋ ํด๋น ํด๋์ค๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ด๋๋ผ๋ ๋ช ๋ น์ด์. ๊ทธ๋ ๊ฒ ํ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ dog ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ผ์๋ฃ๊ณ dog ์ธ์คํด์ค๋ฅผ ๋ฐํํจ.ใฑ
์ฝ๋ฉ์ ์ ๋ถ ์๋ฆฌ์์น๋๋ก ๋์๊ฐ๊ธฐ์ ๋ช ๋ น์ด ํ๋๋ผ๋ ์๋ฏธ๋ฅผ ๋์ถฉ ์ดํดํ๊ณ ์ง๋๊ฐ๋ฉด ์ง๋๊ฐ ๋๊ฐ ์๊ฐ ์์. ์ฐจ๊ทผ์ฐจ๊ทผ ์ ์๋ฅผ ์ฝ๊ณ ๋ ์ฝ์ผ๋ฉฐ ๊ทธ๊ฒ ๋์ฒด ๋ญ ํ๋๊ฑด๋ฐ? ํ๋ฉฐ ํ๋ค์ด๊ฐ๋ ์ ๋ฐ์ ์๋ค.
๊ทธ๋ ๊ฒํด์ผ๊ฒ ์ด์ .. ์กฐ์ธ๊ฐ์ฌํฉ๋๋ค
GC๊ฐ ๋ญ์ง newํค์๋๊ฐ ๋ฌด์์์๋ฏธํ๋์ง. ๋ ๋์๊ฐ๋ฉด memory structure์๋ํด ๊ณต๋ถํด๋ด๋ ์ข์๊ฑฐ์์.
๋๊ตฐ๊ฐ๋ ๋์ถฉ์๊ณ ๊ฑ ์ธ์ค๋ง์๋ฉด ๋๋๊น ๊ตณ์ด ๊ทธ๋ ๊ฒ ์์ธํ ์ํ์์๋ค.. ๋ผ๊ณ ํ๋ ๋ด์ฉ๋ค์ด ๊ฒฐ๊ตญ ๋ญ๊ฐํ๋ค๋ณด๋ฉด ๋ค ๊ถ๊ธํด์ง๊ณ ํ์ํด์ง๊ณ ๋ชจ๋ฅด๋ฉด ํผ๋ณด๋ ์ผ ์๊ธฐ๊ณ ๊ทธ๋ฐ์ผ๋ค์ด ์๊ฒจ์ฌ. ์ด๋ก ์ ์ธ๊ฑฐ๋ ๊ธฐ์ด์ ์ธ? ๋ค๋ฃจ์ง ์๊ณ ๋น์ฅ ๋์๋ณด์ด๋๊ฒ๋ง ๊ณต๋ถํ๊ณ ๋์ด๊ฐ๋(์ ์์ ์ธ ์ปด๊ณต์ด๋ ํ์๊ฐ์ ์ปค๋ฆฌํ๋ผ์ ๋ฐ์ง์๊ณ ์ ๋ํฐ๋ c# ์ ํ๋ธ ๊ฐ์๊ฑธ๋ก ๋น ๋ฅด๊ฒ ํ๊ณ ์์ํ๊ฒฝ์ฐ)์์ญ์ด๋ ๋ด์ฉ๋ค์ด ๊ดํ ์ปด๊ณต ์ปค๋ฆฌํ๋ผ์ ์์ง๊น์ง๋ 1ํ๋ ์ ๊ฐ๋ฅด์น๋๊ฒ ์๋๊ฒ. ๊ทธ๋ฐ๊ฑฐ ๊ถ๊ธํด์ ์ฐพ์๋ณด๋๊ฑฐ๋ณด๋ฉด ์ ๋ฐฐ์ฐ๊ณ ์๋๊ฑฐ๊ฐ๋ค์ฌ. ๋ชฉํํ๋๊ฒ ๋ญ์ง์๋ฐ๋ผ ๋ญ ๋๋ฌด๊น๊ฒํ๋ฉด ๊ทธ๊ฒ๋ ๊ทธ๊ฒ๋๋ฆ๋๋ก ๋ ์ด๋๊ธดํ์ง๋ง. ์ ์ด๋ ์ผ๋ฐ์ ์ธ ๋ํ์์ ๊ธฐ๋ณธ๊ธฐ๋ผ๊ณ ๊ฐ๋ฅด์น๋ ์์ญ๋ค์ ์์๋์ด์ผ ์ข์์์ญ๋ค์. ์๊ฐ๋ ๋ ์ฌ์ ์๋ค๋ฉด ๊ทธ๋ฐ๊ฒ๋ค ๋๋ฌ๋ณด๋๊ฒ๋ ์ข์์
์กฐ์ธ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค ๊ธ์์ ๊ธฐ๋ณธ๊ธฐ๋ผ๊ณ ํ๋๊ฒ ์ด๋ค๊ฑธ์๋ฏธํ๋์? ๊ทธ๋ฆฌ๊ณ ๋ฐ์๊ธ๋ดค๋๋ฐ c์ธ์ด๋ํด์ผ๋๋ค๋๋ง์ด์๋๋ฐ c์ธ์ด์์ด c#๋ง ๊น๊ฒํ๋๊ฑด ์์ข์์ ํ์ธ๊ฐ์?
๋ณดํต์ ์ปค๋ฆฌํ๋ผ์ด c -> c++ -> c# ์ด๋ ๊ฒ ๋ฐฐ์์. ๊ฐ๋ ์ ํ์ฅ์ ๋ฐ์๋ค์ด๊ธฐ ์ข์ ์ปค๋ฆฌํ๋ผ๊ณผ์ ์ด๋ผ.. ๊ธฐ๋ณธ์ด๋ผ๊ณ ํจ์ ์ปด๊ณต์์ ๊ฐ๋ฅด์น๋ ์ปดํจํฐ๊ตฌ์กฐ๋ ์๋ฃ๊ตฌ์กฐ ์๊ณ ๋ฆฌ์ฆ ๋ฑ๋ฑ์ ์ธ์ด ์ธ์ ์์ญ๋ค์๋ํ ๋ด์ฉ. ๊ฒ๋ค๋ค๋ ๋ค ๊ฒฐ๊ตญ ํ์์์ํด์๋ ์ ํ๊ฒ ๋๋๋ ์ด ์ฌ๊ฑฐ์์ฌ. ๋ฏธ๋ฆฌ์์๋๋ฉด ๋ญ๊ฐ ๊ณต๋ถํ๋๋ฐ ๋์๋ ์๋์๊ณ ใ ใ
๊ทผ๋ฐ ๋ชฉ์ ์๋ฐ๋ผ ์ ๊ฑธ ๊ผญ ๋ค๋ฐฐ์์ผํ๋~ ๋ผ๊ณ ํ๋ฉด ๊ฑ ํ์ํ๋งํผ ๋ฐฐ์์ ์๋๋งํผ ์ ์ผ๋์์ ์๋ด๋๊ฒ ์ต๊ณ ์ ์๋๋ฆฌ์ค๋๊น.. ์ ๊ฑฐ ๋ค๋ฐฐ์ฐ๋๊ฒ ๋ฌด์กฐ๊ฑดํ์ํ๋ค๊ณ ๋ง์ ๋ชปํ๊ฒ ์. ์ ๋ํฐ c# ๋ฐฐ์์ ์ธ๋๊ฒ์ ๋ง๋ค๊ณ ์ถ๋ค~ ๋ผ๋ ๋ชฉํ๊ฐ์ง์ฌ๋ํํ ์ ๋ฐ๊ฑฐ ๋ค๋ฐฐ์ฐ๊ณ ๊ทธ๋ด์ ์ ๋ํฐ c# ๋ฐฐ์ฐ๋ผํ๋ฉด ๊ทธ๊ฑด๊ทธ๊ฒ๋๋ก ์๋๊ฑฐ๊ฐ์. ์ ๊ฑด์ด์ ์ผ๋ฐ์ ์ธ ํ๋ก๊ทธ๋๋จธ๋ฅผ ํ๋ ค๋ ์ปด๊ณต๋ค๋๋์ฌ๋๋ค์ด `๊ธฐ๋ณธ` ์ผ๋ก ๋ฐฐ์ฐ๋ ๋ด์ฉ์ใ ใ . ์ด์ฐ์ํ๊ฐ์๊ฑฐ ๋ชฐ๋ผ๋ ์ ๋ํฐ ์ฐ๋๋ฐ ์ง์ฅ์์์ผ๋๊น์. ๋์ถฉ ํ์ํ ๋ ํ์ํ๊ฑฐ ์ฐพ์๋ง๋ด๋ ์ด์บ๋ ์ธ๋๊ฒ์๋ง๋๋๊น..
์ง๋๊ฐ๋ค๊ฐ ํ๋ฒ ๋ ๋ฌ์๋ด ๋๋น. ํธ์ฅ์ ์ฒซ ์ธ์ด๊ฐ C#์ด์ ๊ฑฐ๋ฉด ์ฝ๊ฒ ๊ฐ๋ ๊ฐ์ ๊ฑฐ ๋ฐฐ์ธ ์ ์๋ Python๊ฐ์ ๊ฑฐ ๋จผ์ ๋ฐฐ์๋ณด์๋ ๊ฑฐ ์ถ์ฒ๋๋ ค์. ์ธ์ด๋ฅผ ํ๋ ๊ฐ๋ ์ ์ผ๋ก ์ตํ๋๊ฒ ๋ค์ ์ธ์ด๋ฅผ ๋ฐฐ์ธ๋ ์ ๋ง ํฐ ๋์์ด ๋ฉ๋๋ค. ๋ฌผ๋ก ์ฐ๋ ๋ฐฉ์์ด๋ ์ด๋ฐ๊ฑด ํ๋ฆด ์ ๋ ์์ง๋ง์ฉ! ๊ฐ์ธ์ ์ธ ์ถ์ฒ์ด์์ด๋ค :)
๋ฉ๋ชจ๋ฆฌ๋ ์์ ๊ณต๊ฐ์ด๊ณ new๋ฅผ ์ฐ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์์ Dog๋ผ๋ ์ค์ฒด(์ธ์คํด์ค)๋ฅผ ์์ฑํ๊ฒ ๋ค๋ ๋ง์. ์ฆ ๋๊ฐ ์์ ๊ณต๊ฐ์ ์ค์ฒด๋ฅผ ์์ฑํจ์ผ๋ก์จ ์์ผ๋ก ์ด๋ค๋ ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฑํ๋ฉด ๊ทธ ์ฒซ๋ฒ์งธ ์ฃผ์๊ฐ dog๋ผ๋ ๋ณ์์ ๋ด๊ธฐ๊ณ , Dog๋ผ๋ ํ์ (์ค๊ณ๋)์ด๋ผ๋๊ฑธ ์์ผ๋ก์จ ์ปดํจํฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์๊ฒ๋จ. int, float๊ฐ์ ๊ธฐ๋ณธํ ํ์ ์ผ๊ฒฝ์ฐ new๋ฅผ ์ฐ์ง ์์๋ ์๋์ผ๋ก ์ง์ญ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋์ง๋ง, Dog๊ฐ์ ์ฌ์ฉ์์ง์ ํ์ ์ new๋ฅผ ์จ์ผ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋จ
ํ์ง๋ง ํด๋์ค๋ด ๋งค์๋๋ ๋ณ์๊ฐ static์ผ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ ์์์ ์๋์ผ๋ก ๊ทธ ๋ฉ์๋๋ ๋ณ์๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ฏ๋ก, Dog.Bark()๊ฐ์ด ํ์ ๋ง์ผ๋ก ํธ์ถํ ์์์. C++์๊ฒฝ์ฐ์๋ new๋ฅผ ์ฐ์ง ์์๊ฒฝ์ฐ stack๋ฉ๋ชจ๋ฆฌ์ ์ง์ญ๋ณ์๋ก ์กํ๊ณ ํจ์๋ฅผ ๋น ์ ธ๋์ฌ๊ฒฝ์ฐ ์๋์ผ๋ก ์ฌ๋ผ์ง, new๋ฅผ ์ธ๊ฒฝ์ฐ heap๋ฉ๋ชจ๋ฆฌ์ ์กํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์๋์ด์ ์ฃผ์๊ฐ๋ง ๊ฐ์ง๊ณ ์์ผ๋ฉด ์ธ์ ๋ ๊ทธ ์ฃผ์๊ฐ์ ํตํด ์ฐธ์กฐํ ์ ์์