๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ์ , ๋ฐ์ดํฐ ๊ตฌ์กฐ, ๋๋ฒ๊น ๋ฐ ์ต์ ํ ์ ๋ต์ ๋ค๋ฃจ๋ฉฐ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ๋ณต์ก์ฑ์ ํ๊ตฌํฉ๋๋ค.
์ ๋ฌธ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ: ์ข ํฉ ๊ฐ์ด๋
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ํนํ ๊ณ ์ฑ๋ฅ์ ์ ๋ขฐํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด์์ ๋๋ค. ์ด ๊ฐ์ด๋๋ ๋ค์ํ ํ๋ซํผ๊ณผ ์ธ์ด์ ๊ฐ๋ฐ์์๊ฒ ์ ํฉํ ์ ๋ฌธ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ํต์ฌ ์์น๊ณผ ๊ดํ์ ๊น์ด ์๊ฒ ๋ค๋ฃน๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ดํด
ํจ๊ณผ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ถฉ๋์ ์ค์ด๋ฉฐ, ์ต์ ์ ์ฑ๋ฅ์ ๋ณด์ฅํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ํ๊ฒฝ ๋ด์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ํ ๋น, ์ฌ์ฉ ๋ฐ ํด์ ๋๋์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ๋ต
๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ด์ ์ฒด์ ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๋ฉ์ปค๋์ฆ์ ์ดํดํ๋ ๊ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ์ ๋ต์ ์ ํํ๋ ๋ฐ ํ์์ ์ ๋๋ค.
- ์ ์ ํ ๋น: ๋ฉ๋ชจ๋ฆฌ๋ ์ปดํ์ผ ์์ ํ ๋น๋๋ฉฐ ํ๋ก๊ทธ๋จ ์คํ ๋ด๋ด ๊ณ ์ ๋ฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํฌ๊ธฐ์ ์๋ช ์ด ์๋ ค์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ํฉํฉ๋๋ค. ์: C++์ ์ ์ญ ๋ณ์.
- ์คํ ํ ๋น: ๋ฉ๋ชจ๋ฆฌ๋ ์ง์ญ ๋ณ์ ๋ฐ ํจ์ ํธ์ถ ๋งค๊ฐ๋ณ์๋ฅผ ์ํด ์คํ์ ํ ๋น๋ฉ๋๋ค. ์ด ํ ๋น์ ์๋์ด๋ฉฐ ํ์ ์ ์ถ(LIFO) ์์น์ ๋ฐ๋ฆ ๋๋ค. ์: Java ํจ์์ ์ง์ญ ๋ณ์.
- ํ ํ ๋น: ๋ฉ๋ชจ๋ฆฌ๋ ๋ฐํ์์ ํ์์ ๋์ ์ผ๋ก ํ ๋น๋ฉ๋๋ค. ์ด๋ ์ ์ฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ง๋ง ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ช ์์ ์ธ ํ ๋น ๋ฐ ํด์ ๊ฐ ํ์ํฉ๋๋ค. ์: C++์์ `new`์ `delete` ์ฌ์ฉ ๋๋ C์์ `malloc`๊ณผ `free` ์ฌ์ฉ.
์๋ ๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
C ๋ฐ C++์ ๊ฐ์ ์ผ๋ถ ์ธ์ด๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ฑํํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ช ์์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํด์ผ ํฉ๋๋ค. Java, Python, C#๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ธ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ํตํด ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง ์ ์คํ๊ฒ ์ฒ๋ฆฌํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๋๊ธ๋ง ํฌ์ธํฐ์ ์ํ์ด ์ฆ๊ฐํฉ๋๋ค. ๊ฐ๋ฐ์๋ ํฌ์ธํฐ ์ฐ์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ถ์ ์ดํดํด์ผ ํฉ๋๋ค.
- ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์๋ํํ์ฌ ๊ฐ๋ฐ์ ๋จ์ํํฉ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๊ณ ํ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์์ผ๋ฉฐ ํญ์ ์์ธก ๊ฐ๋ฅํ์ง ์์ ์ ์์ต๋๋ค.
ํ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์
๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ํ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ฑ๋ฅ์ ํฐ ์ํฅ์ ๋ฏธ์นฉ๋๋ค. ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ๋ฐฐ์น๋๋์ง ์ดํดํ๋ ๊ฒ์ ์ต์ ํ์ ์ค์ํฉ๋๋ค.
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ
๋ฐฐ์ด์ ๋์ผํ ์ ํ์ ์์์ ๋ํ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ ๊ณต๊ฐ์ ์ ๊ณตํฉ๋๋ค. ๋ฐ๋ฉด์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ํฌ์ธํฐ๋ฅผ ํตํด ํจ๊ป ์ฐ๊ฒฐ๋ ๋์ ์ผ๋ก ํ ๋น๋ ๋ ธ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์์ ๋น ๋ฅด๊ฒ ์ ๊ทผํ ์ ์๋ ๋ฐ๋ฉด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ ์ด๋ ์์น์์๋ ์์๋ฅผ ํจ์จ์ ์ผ๋ก ์ฝ์ ํ๊ณ ์ญ์ ํ ์ ์์ต๋๋ค.
์์:
๋ฐฐ์ด: ์ด๋ฏธ์ง์ ํฝ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๊ณ ๋ คํด ๋ณด์ธ์. ๋ฐฐ์ด์ ์ขํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ณ ํฝ์ ์ ์ ๊ทผํ๋ ์์ฐ์ค๋ฝ๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ฐ๊ฒฐ ๋ฆฌ์คํธ: ๋น๋ฒํ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์๋ ๋์ ์์ ๋ชฉ๋ก์ ๊ด๋ฆฌํ ๋, ๊ฐ ์ฝ์ ๋๋ ์ญ์ ํ ์์๋ฅผ ์ด๋ํด์ผ ํ๋ ๋ฐฐ์ด๋ณด๋ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
ํด์ ํ ์ด๋ธ
ํด์ ํ ์ด๋ธ์ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ํค๋ฅผ ํด๋น ๊ฐ์ ๋งคํํจ์ผ๋ก์จ ๋น ๋ฅธ ํค-๊ฐ ์กฐํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ํจ์จ์ ์ธ ์ฑ๋ฅ์ ๋ณด์ฅํ๊ธฐ ์ํด ํด์ ํจ์ ์ค๊ณ ๋ฐ ์ถฉ๋ ํด๊ฒฐ ์ ๋ต์ ๋ํ ์ ์คํ ๊ณ ๋ ค๊ฐ ํ์ํฉ๋๋ค.
์์:
์์ฃผ ์ก์ธ์คํ๋ ๋ฐ์ดํฐ๋ฅผ ์ํ ์บ์๋ฅผ ๊ตฌํํ๋ ๊ฒฝ์ฐ. ํด์ ํ ์ด๋ธ์ ํค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๊ฒ ๊ฒ์ํ์ฌ ๋ ๋๋ฆฐ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ๊ณ์ฐํ๊ฑฐ๋ ๊ฒ์ํ ํ์๊ฐ ์๋๋ก ํฉ๋๋ค.
ํธ๋ฆฌ
ํธ๋ฆฌ๋ ๋ฐ์ดํฐ ์์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ณ์ธต์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋๋ค. ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ ํจ์จ์ ์ธ ๊ฒ์, ์ฝ์ ๋ฐ ์ญ์ ์์ ์ ์ ๊ณตํฉ๋๋ค. B-ํธ๋ฆฌ ๋ฐ ํธ๋ผ์ด์ ๊ฐ์ ๋ค๋ฅธ ํธ๋ฆฌ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ฑ ๋ฐ ๋ฌธ์์ด ๊ฒ์๊ณผ ๊ฐ์ ํน์ ์ฌ์ฉ ์ฌ๋ก์ ์ต์ ํ๋์ด ์์ต๋๋ค.
์์:
ํ์ผ ์์คํ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ. ํธ๋ฆฌ ๊ตฌ์กฐ๋ ๋๋ ํฐ๋ฆฌ์ ํ์ผ ๊ฐ์ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋ํ๋ผ ์ ์์ด ํ์ผ์ ํจ์จ์ ์ธ ํ์ ๋ฐ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋๋ฒ๊น
๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ ์ง๋จํ๊ณ ์์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ณ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ๊ฐ๋ ฅํ ๋๋ฒ๊น ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ง
๋ฉ๋ชจ๋ฆฌ ๋์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋์์ง๋ง ๊ฒฐ์ฝ ํด์ ๋์ง ์์ ๋ ๋ฐ์ํ๋ฉฐ, ์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ง์ ์ธ ๊ณ ๊ฐ๋ก ์ด์ด์ง๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ง ๋๊ตฌ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ๋ฅผ ์ถ์ ํ์ฌ ์ด๋ฌํ ๋์๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋๊ตฌ:
- Valgrind (๋ฆฌ๋ ์ค): ๋ฉ๋ชจ๋ฆฌ ๋์, ์ ํจํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค, ์ด๊ธฐํ๋์ง ์์ ๊ฐ์ ์ฌ์ฉ ๋ฑ ๊ด๋ฒ์ํ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ๋ฅผ ํ์งํ ์ ์๋ ๊ฐ๋ ฅํ ๋ฉ๋ชจ๋ฆฌ ๋๋ฒ๊น ๋ฐ ํ๋กํ์ผ๋ง ๋๊ตฌ์ ๋๋ค.
- AddressSanitizer (ASan): ๋น๋ ํ๋ก์ธ์ค์ ํตํฉํ ์ ์๋ ๋น ๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ ํ์ง๊ธฐ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์, ๋ฒํผ ์ค๋ฒํ๋ก ๋ฐ ํด์ ํ ์ฌ์ฉ ์ค๋ฅ๋ฅผ ํ์งํ ์ ์์ต๋๋ค.
- Heaptrack (๋ฆฌ๋ ์ค): C++ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ถ์ ํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ์๋ณํ ์ ์๋ ํ ๋ฉ๋ชจ๋ฆฌ ํ๋กํ์ผ๋ฌ์ ๋๋ค.
- Xcode Instruments (macOS): iOS ๋ฐ macOS ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ํ์งํ๊ธฐ ์ํ Leaks ๋๊ตฌ๋ฅผ ํฌํจํ๋ ์ฑ๋ฅ ๋ถ์ ๋ฐ ๋๋ฒ๊น ๋๊ตฌ์ ๋๋ค.
- Windows Debugger (WinDbg): ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ Windows์ฉ ๊ฐ๋ ฅํ ๋๋ฒ๊ฑฐ์ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์์ ํ์ง
๋ฉ๋ชจ๋ฆฌ ์์์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ชป ๋ฎ์ด์ฐ์ฌ์ง๊ฑฐ๋ ์ก์ธ์ค๋ ๋ ๋ฐ์ํ๋ฉฐ, ์ด๋ ์์ธกํ ์ ์๋ ํ๋ก๊ทธ๋จ ๋์์ผ๋ก ์ด์ด์ง๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์์ ํ์ง ๋๊ตฌ๋ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ๊ฒฝ๊ณ ๋ฐ ์ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ๋ฅผ ํ์งํ์ฌ ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ธฐ๋ฒ:
- ์ฃผ์ ์๋ํ์ด์ (ASan): ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์ง์ ์ ์ฌํ๊ฒ, ASan์ ๊ฒฝ๊ณ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค ๋ฐ ํด์ ํ ์ฌ์ฉ ์ค๋ฅ๋ฅผ ์๋ณํ๋ ๋ฐ ํ์ํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ: ์ด์ ์ฒด์ ๋ ์ธ๊ทธ๋ฉํ ์ด์ ํดํธ ๋ฐ ์ก์ธ์ค ์๋ฐ๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ค๋ฅ๋ฅผ ํ์งํ๋ ๋ฐ ๋์์ ์ค ์ ์์ต๋๋ค.
- ๋๋ฒ๊น ๋๊ตฌ: ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ์ ๊ฒ์ฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ ์ก์ธ์ค๋ฅผ ์ถ์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์ค๋ฅ์ ์์ธ์ ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๋๋ฒ๊น ์๋๋ฆฌ์ค ์์
์ด๋ฏธ์ง๋ฅผ ์ฒ๋ฆฌํ๋ C++ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ํด ๋ณด์ญ์์ค. ๋ช ์๊ฐ ๋์ ์คํ๋ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋๋ ค์ง๊ธฐ ์์ํ๊ณ ๊ฒฐ๊ตญ ์ถฉ๋ํฉ๋๋ค. Valgrind๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์ ๋ด๋น ํจ์ ๋ด์์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๊ฐ์ง๋ฉ๋๋ค. ๋์๋ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋ ์ด๋ฏธ์ง ๋ฒํผ์ฉ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ํ ๋๋ฝ๋ `delete[]` ๋ฌธ์ผ๋ก ์ถ์ ๋ฉ๋๋ค. ๋๋ฝ๋ `delete[]` ๋ฌธ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ํด๊ฒฐ๋๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ํ๋ฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์ต์ ํ ์ ๋ต
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ ํํ๋ ๊ฒ์ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์ค์ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ์ ๊ณต๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ์ฌ๋ฌ ์ ๋ต์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ๊ตฌ์กฐ ์ต์ ํ
์ ํ๋ฆฌ์ผ์ด์ ์ ํ์์ ๋ง๋ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ์ ๊ณต๊ฐ, ์ ๊ทผ ์๊ฐ, ์ฝ์ /์ญ์ ์ฑ๋ฅ ์ธก๋ฉด์์ ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ฐ์ ์ฅ๋จ์ ์ ๊ณ ๋ คํ์ญ์์ค.
์์:
- ์์ ์ ๊ทผ์ด ๋น๋ฒํ ๋ `std::list` ๋์ `std::vector` ์ฌ์ฉ: `std::vector`๋ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์ ์ ๊ณตํ์ฌ ๋น ๋ฅธ ์์ ์ ๊ทผ์ ํ์ฉํ๋ ๋ฐ๋ฉด, `std::list`๋ ๋์ ์ผ๋ก ํ ๋น๋ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ์์ ์ ๊ทผ์ด ๋ ๋๋ฆฝ๋๋ค.
- ๋ถ๋ฆฌ์ธ ๊ฐ ์งํฉ์ ๋ํ๋ด๊ธฐ ์ํด ๋นํธ์ ์ฌ์ฉ: ๋นํธ์ ์ ์ต์ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ฆฌ์ธ ๊ฐ์ ํจ์จ์ ์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
- ์ ์ ํ ์ ์ ์ ํ ์ฌ์ฉ: ์ ์ฅํด์ผ ํ๋ ๊ฐ์ ๋ฒ์๋ฅผ ์์ฉํ ์ ์๋ ๊ฐ์ฅ ์์ ์ ์ ์ ํ์ ์ ํํ์ญ์์ค. ์๋ฅผ ๋ค์ด, -128์์ 127 ์ฌ์ด์ ๊ฐ๋ง ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ `int32_t` ๋์ `int8_t`๋ฅผ ์ฌ์ฉํ์ญ์์ค.
๋ฉ๋ชจ๋ฆฌ ํ๋ง
๋ฉ๋ชจ๋ฆฌ ํ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก ํ์ ๋ฏธ๋ฆฌ ํ ๋นํ๊ณ ์ด๋ฌํ ๋ธ๋ก์ ํ ๋น ๋ฐ ํด์ ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ํนํ ์์ ๊ฐ์ฒด์ ๋ํด ๋น๋ฒํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ์ ๊ด๋ จ๋ ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
์ฅ์ :
- ํํธํ ๊ฐ์: ๋ฉ๋ชจ๋ฆฌ ํ์ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์์ญ์์ ๋ธ๋ก์ ํ ๋นํ์ฌ ํํธํ๋ฅผ ์ค์ ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๋ฉ๋ชจ๋ฆฌ ํ์์ ๋ธ๋ก์ ํ ๋นํ๊ณ ํด์ ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฆ ๋๋ค.
- ๊ฒฐ์ ๋ก ์ ํ ๋น ์๊ฐ: ๋ฉ๋ชจ๋ฆฌ ํ ํ ๋น ์๊ฐ์ ์์คํ ํ ๋น์ ์๊ฐ๋ณด๋ค ๋ ์์ธก ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์บ์ ์ต์ ํ
์บ์ ์ต์ ํ๋ ์บ์ ํํธ์จ์ ์ต๋ํํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ดํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์ด๋ ์ฃผ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ ํ์์ฑ์ ์ค์ฌ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ธฐ๋ฒ:
- ๋ฐ์ดํฐ ์ง์ญ์ฑ: ํจ๊ป ์ก์ธ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ก ๊ฐ๊น๊ฒ ๋ฐฐ์ดํ์ฌ ์บ์ ํํธ ๊ฐ๋ฅ์ฑ์ ๋์ ๋๋ค.
- ์บ์ ์ธ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ: ์บ์ ์ฑ๋ฅ์ ์ต์ ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํฉ๋๋ค.
- ๋ฃจํ ์ต์ ํ: ์บ์ ์นํ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ์ ์ก์ธ์คํ๋๋ก ๋ฃจํ ๋ฐ๋ณต ์์๋ฅผ ์ฌ์ ๋ ฌํฉ๋๋ค.
์ต์ ํ ์๋๋ฆฌ์ค ์์
ํ๋ ฌ ๊ณฑ์ ์ ์ํํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ณ ๋ คํด ๋ณด์ญ์์ค. ํ๋ ฌ์ ์บ์์ ๋ง๋ ๋ ์์ ๋ธ๋ก์ผ๋ก ๋๋๋ ์บ์ ์ธ์ ํ๋ ฌ ๊ณฑ์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํจ์ผ๋ก์จ ์บ์ ๋ฏธ์ค ํ์๋ฅผ ํฌ๊ฒ ์ค์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๊ณ ๊ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ
๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ๊ณ ๊ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฒ์ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ์ฑ๋ฅ์ ๋์ฑ ์ต์ ํํ ์ ์์ต๋๋ค.
์ค๋งํธ ํฌ์ธํฐ
์ค๋งํธ ํฌ์ธํฐ๋ ์์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ธ๋ RAII(Resource Acquisition Is Initialization) ๋ํผ๋ก, ๋ฉ๋ชจ๋ฆฌ ํด์ ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ค๋งํธ ํฌ์ธํฐ๊ฐ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๋๋ก ๋ณด์ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๋๊ธ๋ง ํฌ์ธํฐ๋ฅผ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ค๋งํธ ํฌ์ธํฐ์ ์ข ๋ฅ (C++):
- `std::unique_ptr`: ๋ฆฌ์์ค์ ๋ฐฐํ์ ์์ ๊ถ์ ๋ํ๋ ๋๋ค. `unique_ptr`์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฆฌ์์ค๊ฐ ์๋์ผ๋ก ํด์ ๋ฉ๋๋ค.
- `std::shared_ptr`: ์ฌ๋ฌ `shared_ptr` ์ธ์คํด์ค๊ฐ ๋ฆฌ์์ค์ ์์ ๊ถ์ ๊ณต์ ํ ์ ์๋๋ก ํฉ๋๋ค. ๋ง์ง๋ง `shared_ptr`์ด ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฉด ๋ฆฌ์์ค๊ฐ ํด์ ๋ฉ๋๋ค. ์ฐธ์กฐ ์นด์ดํ ์ ์ฌ์ฉํฉ๋๋ค.
- `std::weak_ptr`: `shared_ptr`์ ์ํด ๊ด๋ฆฌ๋๋ ๋ฆฌ์์ค์ ๋ํ ๋น์์ ์ฐธ์กฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ํ ์ข ์์ฑ์ ๋๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฌ์ฉ์ ์ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์
์ฌ์ฉ์ ์ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํน์ ์๊ตฌ์ ๋ง๊ฒ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์กฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ ํน์ ์๋๋ฆฌ์ค์์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ํํธํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
์ฌ์ฉ ์ฌ๋ก:
- ์ค์๊ฐ ์์คํ : ์ฌ์ฉ์ ์ง์ ํ ๋น์๋ ์ค์๊ฐ ์์คํ ์ ์ค์ํ ๊ฒฐ์ ๋ก ์ ํ ๋น ์๊ฐ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์๋ฒ ๋๋ ์์คํ : ์ฌ์ฉ์ ์ง์ ํ ๋น์๋ ์๋ฒ ๋๋ ์์คํ ์ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ฆฌ์์ค์ ์ต์ ํ๋ ์ ์์ต๋๋ค.
- ๊ฒ์: ์ฌ์ฉ์ ์ง์ ํ ๋น์๋ ํํธํ๋ฅผ ์ค์ด๊ณ ๋ ๋น ๋ฅธ ํ ๋น ์๊ฐ์ ์ ๊ณตํ์ฌ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ๋งคํ
๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ๋ฉด ํ์ผ ๋๋ ํ์ผ์ ์ผ๋ถ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ง์ ๋งคํํ ์ ์์ต๋๋ค. ์ด๋ ๋ช ์์ ์ธ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์ ์์ด ํ์ผ ๋ฐ์ดํฐ์ ํจ์จ์ ์ผ๋ก ์ก์ธ์คํ ์ ์๊ฒ ํด์ค๋๋ค.
์ฅ์ :
- ํจ์จ์ ์ธ ํ์ผ ์ก์ธ์ค: ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํตํด ํ์ผ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์ ์ก์ธ์คํ ์ ์์ด ์์คํ ํธ์ถ์ ์ค๋ฒํค๋๋ฅผ ํผํ ์ ์์ต๋๋ค.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ํ๋ก์ธ์ค ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
- ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ ๋งคํ์ ์ฌ์ฉํ๋ฉด ์ ์ฒด ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ง ์๊ณ ๋ ๋์ฉ๋ ํ์ผ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
์ ๋ฌธ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค:
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ฐ๋ ์ดํด: ๋ฉ๋ชจ๋ฆฌ ํ ๋น, ํด์ ๋ฐ ๊ฐ๋น์ง ์ปฌ๋ ์ ์ ๋ํ ์ฒ ์ ํ ์ดํด๋ ํ์์ ์ ๋๋ค.
- ์ ์ ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ ํ: ์ ํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ์ ์ต์ ํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ํํ์ญ์์ค.
- ๋ฉ๋ชจ๋ฆฌ ๋๋ฒ๊น ๋๊ตฌ ์ฌ์ฉ: ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์ ์ค๋ฅ๋ฅผ ํ์งํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ๋๋ฒ๊น ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ญ์์ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ต์ ํ: ๋ฉ๋ชจ๋ฆฌ ์ ์ ๊ณต๊ฐ์ ์ค์ด๊ณ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ์ ๋ต์ ๊ตฌํํ์ญ์์ค.
- ์ค๋งํธ ํฌ์ธํฐ ์ฌ์ฉ: ์ค๋งํธ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ์ญ์์ค.
- ์ฌ์ฉ์ ์ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๊ณ ๋ ค: ํน์ ์ฑ๋ฅ ์๊ตฌ ์ฌํญ์ ์ํด ์ฌ์ฉ์ ์ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
- ์ฝ๋ฉ ํ์ค ์ค์: ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์ฝ๋ฉ ํ์ค์ ์ค์ํ์ญ์์ค.
- ๋จ์ ํ ์คํธ ์์ฑ: ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ฝ๋์ ์ ํ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํด ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ญ์์ค.
- ์ ํ๋ฆฌ์ผ์ด์ ํ๋กํ์ผ๋ง: ๋ฉ๋ชจ๋ฆฌ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋กํ์ผ๋งํ์ญ์์ค.
๊ฒฐ๋ก
์ ๋ฌธ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์น, ๋ฐ์ดํฐ ๊ตฌ์กฐ, ๋๋ฒ๊น ๊ธฐ์ ๋ฐ ์ต์ ํ ์ ๋ต์ ๋ํ ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋ค. ์ด ๊ฐ์ด๋์ ์์ฝ๋ ์ง์นจ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๊ฐ๋ฐ์๋ ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ด๋ฉฐ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์์ต๋๋ค.
C++, Java, Python ๋๋ ๋ค๋ฅธ ์ธ์ด๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๋ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋ง์คํฐํ๋ ๊ฒ์ ๋ชจ๋ ์ํํธ์จ์ด ์์ง๋์ด์๊ฒ ์ค์ํ ๊ธฐ์ ์ ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ์ง์์ ์ผ๋ก ๋ฐฐ์ฐ๊ณ ์ ์ฉํจ์ผ๋ก์จ ๊ธฐ๋ฅ์ ์ผ ๋ฟ๋ง ์๋๋ผ ์ฑ๋ฅ์ด ๋ฐ์ด๋๊ณ ์ ๋ขฐํ ์ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.