๐ Call by Value, Call by reference, Call by sharing
CS ๊ณต๋ถ๋ฅผ ํ๋ฉฐ Call by Value, Call by Reference
์ ๋ํด์ ๋ฐฐ์ฐ๊ณ ์๋๋ฐ, ํท๊ฐ๋ฆฌ๋ ๊ธ๋ค์ด ๋ง์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก JS
์์๋ Call by reference, Call by sharing
๋ ์ฉ์ด๋ณด๋ค Call by Value
์ฉ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ง๋ค. ๋ค์ ์์๋ฅผ ๋ค์ด๋ณด์.
// ์์๊ฐ ๋ณ๊ฒฝ์๋
function foo(argument){
argument = 10;
console.log(argument) // 10
}
// ์ดํดํ๊ธฐ ์ฝ๊ฒ ์์ฑํ ํจ์
function foo(){
let argument = 5;
argument = 10;
console.log(argument) // 10
}
let argument = 5;
foo(argument);
console.log(argument); // 5
์์๊ฐ(Primitive type: string
boolean
number
null
undefined
)์ ์ฃผ์ ๋์ ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํ๊ธฐ ๋๋ฌธ์ ํจ์๋ก ์ ๋ฌํ argument
์ ์ค์ ๋ก ํจ์์์ ๋ฐ์ argument
์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ด ๋๋ค. ๋๋ฌธ์ ์ฒซ๋ฒ์งธ ํจ์ ๋ด๋ถ์ argument console.log
๋ 10์ด๋๊ณ , ํจ์ ๋ฐ์์์ argument console.log
๋ 5๊ฐ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด, ์์๊ฐ(Primitive type)์ด ์๋ ๊ฐ์ฒด(Object)์ ์์ฑ์ ๋ณ๊ฒฝํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
// ๊ฐ์ฒดํ์
์ ์์ฑ ๋ณ๊ฒฝ
function foo(argument){
argument.a = 5
console.log(argument) // { a : 5 }
}
// ์ดํดํ๊ธฐ ์ฝ๊ฒ ์์ฑํ ํจ์
function foo(){
let arguments = argument
argument.a = 10
console.log(arguments) // { a : 5 }
}
let argument = {a: 5}
foo(argument)
console.log(argument) // { a : 5 }
๊ฐ์ฒดํ์
์ ์ธ์๋ ์ฃผ์๊ฐ์ ๊ฐ๋ ์๋ก์ด ๋ณ์๊ฐ ๋๋๋ฐ, ์ด๋๋ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ค ๋ฐ๋ผ์ ํจ์๋ด๋ถ์ argument
๊ฐ ๋ฐ๋๋ฉด ํจ์ ์ธ๋ถ์ argument
๋ ๊ฐ์ด ๋ฐ๋๋ค. ์ฆ ํจ์ ๋ด๋ถ์ ๊ฐ๊ณผ ์ธ๋ถ์ ๊ฐ์ด ํจ์ ๋ด๋ถ์ ๊ฐ์ผ๋ก ๋ฐ๋๋ค. ๊ทธ๋ผ ๋ง์ง๋ง์ผ๋ก ๋ค์์ ์ด๋ค ๊ฒฐ๊ณผ๊ฐ ๋์ฌ๊น?
function foo(argument){
argument = 5;
console.log(argument) // ?
}
let argument = {a: 10}
foo(argument)
console.log(argument) // ?
์ฝ๋์ ํ๋ฆ์ ์ดํด๋ณด๋ฉด ์ด๋๋ ํจ์๋ก ๋์ด๊ฐ๋ argument
๋ ๊ฐ์ฒด, ํจ์ ๋ด๋ถ์์ argument
๋ ์์ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ค. ์ด๋๋ ์์ฑ์ ์์ ํ๊ฒ์ด ์๋ ๊ฐ ์ ์ฒด๋ฅผ ๋ฐ๊พธ๋๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํจ์๋ด๋ถ๋ 5
, ํจ์์ธ๋ถ๋ {a : 10}
๋ก ๋์ค๊ฒ๋๋ค.
๋ง์ฝ, c, c++
์ ๊ฐ์ด call by reference
๊ฐ ์กด์ฌํ๋ ์ธ์ด๋ผ๋ฉด ๊ฐ์ด ํจ์ ์ธ๋ถ์ ๊ฐ๋ 5
๋ก ๋ฐ๋์์ ๊ฒ์ด๋ค. (๋์ call by sharing
์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋๋ฐ ์ด๋ ์ ์ ๋ช
์นญ์ด ์๋๋ผ๋ ๋ง๋ ์์ด ์ฌ์ฉํ์ง ์์๋ค.)
์ง๊ธ๊น์ง์ ๋ด์ฉ์ ํ ๋๋ก ์ ๋ฆฌํ๋ฉด ๊ฐ์ฒด์ ์์ฑ์ ์์ ํ ๋๋ ์ฐธ์กฐ ๊ด๊ณ์ง๋ง ๊ฐ ์์ฒด๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ ๊ทธ ๊ด๊ณ๊ฐ ๊นจ์ง๋ค
๋ผ๊ณ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์๋ค. ๋, ํจ์ ๋ด์์ ์์๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ๊ฐ์ ๋ฐ๋์ง ์์ง๋ง, ํจ์ ๋ด์์ ๊ฐ์ฒด์ ์์ฑ์ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ ๊ฐ์ด ๋ฐ๋๋ค.
๋๊ธ