**ํ๋ก๊ทธ๋จ ์คํ ์์์ ๋ฐ๋ฅธ ํ๋ฆ
1. ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
A. ์ฝ๋ ์์ญ
- ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค์ฝ๋๊ฐ ๋ค์ด ๊ฐ๋ ๋ถ๋ถ. ์ฆ, ์คํํ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญ์ผ๋ก ํ
์คํธ(text)์์ญ์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
- ์ฝ๋์์ญ์ ์คํ ํ์ผ์ ๊ตฌ์ฑํ๋ ๋ช ๋ น์ด๋ค์ด ์ฌ๋ผ๊ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ผ๋ก ํจ์, ์ ์ด๋ฌธ, ์์ ๋ฑ์ด ์ฌ๊ธฐ์ ์ง์ ๋๋ค.
B. ๋ฐ์ดํฐ ์์ญ
- ์ ์ญ๋ณ์์ static๋ณ์๊ฐ ํ ๋น๋๋ ์์ญ
- ํ๋ก๊ทธ๋จ์ ์์๊ณผ ๋์์ ํ ๋น๋๊ณ , ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋์ด์ผ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ฉธ๋๋ ์์ญ
- BSS ์์ญ์๋ ์ด๊ธฐ๊ฐ์ด ์๋ ํน์ ์ด๊ธฐํ๋์ง ์์ ์ ์ญ๋ณ์, DATA ์์ญ์๋ ์ด๊ธฐ๊ฐ์ด ์๋ ์ ์ญ๋ณ์๊ฐ ํ ๋น๋๋ ๋ฑ ๋๊ฐ์ง ์์ญ์ผ๋ก ๋๋๋ค.
C. ํ ์์ญ
- ํ๋ก๊ทธ๋๋จธ๊ฐ ํ ๋น/ํด์ ํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ค.
- Java์์๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์๋์ผ๋ก ํด์ ํ๋ค.
- ์ด ๊ณต๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋นํ๋ ๊ฒ์ ๋์ ํ ๋น(Dynamic Memory Allocation)์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
- ํ ๋ฉ๋ชจ๋ฆฌ์ ์์ฅ๋ ๊ฐ ์ค์ ์ฐ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ฃผ์ง ์์ผ๋ฉด ์ด๋ ์ฐ๋ ๊ธฐ ๊ฐ์ผ๋ก ๋จ๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ฉ๋์ ๋ญ๋น๊ฐ ๋ฐ์๋๋ค.
์ด๋ฌํ ํ์์ ๋ฉ๋ชจ๋ฆฌ ๋์ ( Memory Leak ) ์ด๋ผ๊ณ ํ๋ค.
- ์์ HEAP๊ณผ STACK์์ญ์ ์ฌ์ค ๊ฐ์ ๊ณต๊ฐ์ ๊ณต์ ํ๋ค. ๊ทธ๋์ ๊ฐ ์์ญ์ด ์๋ ๊ณต๊ฐ์ ์นจ๋ฒํ๋ ์ผ์ด ๋ฐ์ํ ์ ์๋๋ฐ ์ด๋ฅผ ๊ฐ๊ฐ HEAP OVERFLOW, STACK OVERFLOW๋ผ๊ณ ์นญํ๋ค.
- Stack ์์ญ์ด ํฌ๋ฉด ํด ์๋ก Heap ์์ญ์ด ์์์ง๊ณ , Heap ์์ญ์ด ํฌ๋ฉด ํด์๋ก Stack ์์ญ์ด ์์์ง๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์์์ ๋์ ์ฃผ์๋ก ํ ๋น ๋ฐ๋๋ค.
์ฅ์
- ๋ณ์๋ ์ ์ญ์ ์ผ๋ก ์ก์ธ์ค ํ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ์ ํ์ด ์๋ค.
๋จ์
- ์๋์ ์ผ๋ก ๋๋ฆฐ ์ก์ธ์ค(ํ ๋น,ํด์ ๊ฐ ๋๋ฆฌ๋ค)
- ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํด์ผ ํ๋ค.(๋ณ์๋ฅผ ํ ๋นํ๊ณ ํด์ ํ๋ ์ฑ ์์ด ์๋ค)
- ์ด์์ฒด์ ๋ง๋ค ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ ต๋ค.
D. ์คํ ์์ญ
- ํ๋ก๊ทธ๋จ์ด ์๋์ผ๋ก ์ฌ์ฉํ๋ ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
- ํจ์ ํธ์ถ ์ ์์ฑ๋๋ ์ง์ญ ๋ณ์์ ๋งค๊ฐ๋ณ์๊ฐ ์ ์ฅ๋๋ ์์ญ์ด๊ณ , ํจ์ ํธ์ถ์ด ์๋ฃ๋๋ฉด ์ฌ๋ผ์ง๋ค.
**ํจ์๊ฐ ์ข ๋ฃ๋์ง ์๊ณ ๊ณ์ ์์ด๋ ๊ฒฝ์ฐ(recursive) ์คํ์ค๋ฒํ๋ก์ฐ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- push ๋์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , pop ๋์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ธ์ถํ๋ค.
- ํ์ ์ ์ถ(LIFO, Last-In First-Out) ๋ฐฉ์์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ os๋, ์ปดํ์ผ๋ฌ ๋จ์์ ์ ํด์ง๋ค. ์ปดํ์ผ ์ ํฌ๊ธฐ๊ฐ ์ ํด์ง๋ค.
- ๋ฉ๋ชจ๋ฆฌ์ ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์๋ก ํ ๋น ๋ฐ๋๋ค.
- ์คํ ์์ญ์ ์ ์ฅ๋ ํจ์ ํธ์ถ ์ ๋ณด๋ฅผ ์คํ ํ๋ ์ ( stack frame ) ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Step 1. ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด, ๊ฐ์ฅ ๋จผ์ main() ํจ์๊ฐ ํธ์ถ๋์ด main() ํจ์์ ์คํ ํ๋ ์์ด ์คํ์ ์ ์ฅ๋๋ค.
Step 2. func1() ํจ์๋ฅผ ํธ์ถํ๋ฉด ํด๋น ํจ์์ ๋งค๊ฐ๋ณ์, ๋ฐํ ์ฃผ์๊ฐ, ์ง์ญ ๋ณ์ ๋ฑ์ ์คํ ํ๋ ์์ด ์คํ์ ์ ์ฅ๋๋ค.
Step 3. func2() ํจ์๋ฅผ ํธ์ถํ๋ฉด ํด๋น ํจ์์ ์คํ ํ๋ ์์ด ์ถ๊ฐ๋ก ์คํ์ ์ ์ฅ๋๋ค.
Step 4. func2() ํจ์์ ๋ชจ๋ ์์ ์ด ์๋ฃ๋์ด ๋ฐํ๋๋ฉด, func2() ํจ์์ ์คํ ํ๋ ์๋ง์ด ์คํ์์ ์ ๊ฑฐ๋๋ค.
Step 5. func1() ํจ์์ ํธ์ถ์ด ์ข ๋ฃ๋๋ฉด, func1() ํจ์์ ์คํ ํ๋ ์์ด ์คํ์์ ์ ๊ฑฐ๋๋ค.
Step 6. main() ํจ์์ ๋ชจ๋ ์์ ์ด ์๋ฃ๋๋ฉด, main() ํจ์์ ์คํ ํ๋ ์์ด ์คํ์์ ์ ๊ฑฐ๋๋ฉด์ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ค.
** ์คํ ์ค๋ฒ ํ๋ก์ฐ ๋ฐ์
์ฅ์
- ๋งค์ฐ ๋น ๋ฅธ ์ก์ธ์ค(ํ ๋น,ํด์ ๊ฐ ๋น ๋ฅด๋ค)
- ๋ณ์๋ฅผ ๋ช ์์ ์ผ๋ก ํ ๋น ํด์ ํ ํ์๊ฐ ์๋ค.
๋จ์
- ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ์ ํ
- ์ง์ญ ๋ณ์๋ง