๐ ์๋ฐ๋ Call By Value์ผ๊น, Call By Reference์ผ๊น
๐ง ๋ฉ์๋ ํธ์ถ ๋ฐฉ์์๋ ์ด๋ค ๊ฒ ์์๊น?
โ ๊ฐ์ ์ํ ํธ์ถ (Call By Value)
- ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํด์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
- ํธ์ถ๋ ํจ์ ๋ด๋ถ์์ ํ๋ผ๋ฏธํฐ ๊ฐ์ ๋ณ๊ฒฝํด๋ ์๋ณธ์ ๋ฐ๋์ง ์์ต๋๋ค.
- ์๋ฐ์ ์์ ํ์
(
int
,boolean
,double
๋ฑ)์ ์ด ๋ฐฉ์์ ๋๋ค.
โ ์ฐธ์กฐ์ ์ํ ํธ์ถ (Call By Reference)
- ์ฐธ์กฐ(์ฃผ์)๋ฅผ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ ๋๋ค.
- ํธ์ถ๋ ํจ์์์ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์๋ณธ ๊ฐ์ฒด๋ ๊ฐ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
- C++์์๋ ์ฐธ์กฐ์๋ฅผ ํตํด ์ด ๋ฐฉ์์ด ๊ฐ๋ฅํฉ๋๋ค.
โ ์๋ฐ๋ ์ด๋ค ๋ฐฉ์?
์๋ฐ๋ ์ค์ง Call By Value๋ง ์กด์ฌํฉ๋๋ค.
โ ๊ทธ๋ฐ๋ฐ ์ฐธ์กฐํ ๊ฐ์ฒด ๋๊ธฐ๋ฉด ๋ฐ๋์ง ์๋์?
public void foo() {
Student student = new Student();
var(student); // student ๊ฐ์ฒด ๋๊น
}
public void var(Student student) {
student.study(); // ์๋ณธ ๊ฐ์ฒด์ ์ํฅ ์ค
}
- ์ด ์ฝ๋๋ Call By Reference์ฒ๋ผ ๋ณด์ด์ง๋ง
- ์๋ฐ๋
student
๋ผ๋ ์ฐธ์กฐ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํด์ ๋๊ธด ๊ฒ - ๊ฒฐ๊ตญ, ๊ฐ์ ๋ณต์ฌํ ๊ฒ = Call By Value
๐ฆ ์คํ๊ณผ ํ
๐๏ธ ๋ณ์ ์ ์ฅ ๊ตฌ์กฐ
- ์์ ํ์ : ๋ณ์ + ๊ฐ ๋ชจ๋ ์คํ์ ์ ์ฅ
- ์ฐธ์กฐ ํ์ : ๋ณ์(์คํ) + ๊ฐ์ฒด(ํ)์ ์ ์ฅ๋จ
๋ฉ์๋ ํธ์ถ ์ โ ์คํ์ ๋ณต์ฌ๋ ์ฐธ์กฐ๊ฐ๋ง ์ ๋ฌ
๐ ์ ๋ฆฌ
ํ์ | ํธ์ถ ๋ฐฉ์ | ์๋ณธ ์ํฅ ์ฌ๋ถ | ์ค๋ช |
---|---|---|---|
์์ ํ์ | Call By Value | โ ์ํฅ ์์ | ๊ฐ๋ง ๋ณต์ฌ๋จ |
์ฐธ์กฐ ํ์ | Call By Value | โ ๋ด๋ถ ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ | ์ฐธ์กฐ๊ฐ์ด ๋ณต์ฌ๋จ, ๊ฐ์ฒด๋ ๊ฐ์ |
๐ก ๊ฒฐ๋ก
- ์๋ฐ๋ ๋ฌด์กฐ๊ฑด Call By Value
- ์ฐธ์กฐํ๋ โ์ฐธ์กฐ๊ฐโ์ ๋ณต์ฌํด์ ๋๊ธฐ๋ ๊ฒ
- ์๋ณธ ๊ฐ์ฒด ์์ฒด๋ฅผ ๋ฐ๊พธ๋ ๊ฒ์ด ์๋, ๊ฐ์ ๊ฐ์ฒด์ ํ๋๋ฅผ ๋ฐ๊พธ๋ ๊ฒ
๐ ํท๊ฐ๋ฆฐ๋ค๋ฉด?
โ์๋ฐ๋ Call By Reference๊ฐ ์๋ค.
์ฐธ์กฐํ์ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌํด์ ๋๊ธฐ๋ Call By Value๋ค.โ
๋๊ธ๋จ๊ธฐ๊ธฐ