10.1 ๊ฐ์
๋ถ ํ๋ก๊ทธ๋จ
- ์ผ๋ จ์ ํ์๋ ๊ณ์ฐ์ ์ถ์ํํ๋ ๊ธฐ๋ฒ์ผ๋ก ์ ๊ณต
- ์คํ๊ณผ ๋ถ๋ฆฌํด์ ์ ์ธํ ์ ์๋ ๋ธ๋ก : ํธ์ถ ์๊ตฌ
- ํจ์(Function) : ํจ์ ์ด๋ฆ์ผ๋ก ๊ฐ์ ๋ฐํ
- ์๋ธ๋ฃจํด(Subroutine), ํ๋ก์์ (Procedure) : ๋งค๊ฐ๋ณ์๋ก ๊ฐ์ ๋ฐํ
- ๊ฐ ํ๋ก์์ ๋ ๋จ์ผ ์ง์ ์ ์ ๊ฐ์ง
- Caller๋ Callee์ ์คํ ๋์ ์ค๋จ๋จ
- ๋ถ ํ๋ก๊ทธ๋จ ์ข ๋ฃ ์, ์ ์ด๋ ํธ์ถ์์๊ฒ ๋๋์๊ฐ
10.2 ๋งค๊ฐ๋ณ์ ํ๊ฐ์ ์ ๋ฌ ๊ธฐ๋ฒ
์ค ๋งค๊ฐ๋ณ์
- ํธ์ถ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์ ๋๋ ์ด๋ฆ
ํ์ ๋งค๊ฐ๋ณ์
- ๋ถ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋, ์ค ๋งค๊ฐ๋ณ์๋ฅผ ๋์ ํ์ฌ ์ฌ์ฉํ๋ ์ด๋ฆ
- ์ผ๋ฐ์ ์ผ๋ก ์ง์ญ ๋ณ์ ์ญํ
a. ์ฐธ์กฐ ํธ์ถ (call by reference)
- ์ค ๋งค๊ฐ๋ณ์ ๊ฐ ๋์ ์ฃผ์๋ฅผ ํ์ ๋งค๊ฐ๋ณ์์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ
- caller์ ๋ค์ ๋์์์ ๋ณํ ๊ฐ์ ๋ฐ๋ก ์ฌ์ฉ ํ ์ ์๋ค
b. ๊ฐ ํธ์ถ (call by value)
- ํ์ ๋งค๊ฐ๋ณ์์ ์ง์ญ๋ณ์ํ
- ์ค ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋์ ์ง์ญ๋ณ์๋ก ๋ณต์ฌ
- ์ค ๋งค๊ฐ๋ณ์ ๊ฐ์ด ๋ถ๋ณํจ
- caller๋ ์ค ๋งค๊ฐ๋ณ์์ ์ฃผ์(๋๋ ๊ฐ)์ ์ ๋ฌํ๊ณ , callee๋ r-value๋ฅผ ํ์ ๋งค๊ฐ๋ณ์์ ๊ธฐ์ต์ฅ์์ ๋ณต์ฌ
- ์ดํ ๋ค๋ฅธ ์ง์ญ๋ณ์์ ๋์ผํ๊ฒ ์ทจ๊ธํ๋ค
c. ๊ฒฐ๊ณผ ํธ์ถ (call by result)
- callee๊ฐ ๋ฆฌํด ์ง์ ์ ํ์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋์๋๋ ์ค ๋งค๊ฐ๋ณ์์ ๋ณต์ฌ ํ ๋ฆฌํด
- ํ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ญ ๋ณ์๋ก ๊ฐ์ฃผ
- ๊ฐ์ ๋ฐ์์ค๋๊ฑด ์๋. ๋ฏธ์ ์. (callee์์ ์ ์ํจ)
d. ๊ฐ-๊ฒฐ๊ณผ ํธ์ถ ๊ธฐ๋ฒ (call by value-result)
- callee ์คํ ์์์ ๊ฐ ํธ์ถ ๊ธฐ๋ฒ(call by value)
- callee ์คํ ๋์ ๊ฒฐ๊ณผ ํธ์ถ ๊ธฐ๋ฒ(call by result)
e. ์ด๋ฆ ํธ์ถ ๊ธฐ๋ฒ (call by name)
- ํ์ ๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ด ์ฌ์ฉ๋ ๋๋ง๋ค ๋์๋๋ ์ค ๋งค๊ฐ๋ณ์ ์์ฒด๊ฐ ์ฌ์ฉ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ
- ํ์ํ r-value ๋๋ l-value๋ฅผ ๋งค๋ฒ ๊ณ์ฐํ๋ค