[ μλ°μ€ν¬λ¦½νΈ(JavaScript) ] Call by Value, Call by reference, Call by sharing
π 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
μ΄λΌκ³ λ λΆλ¦¬λλ° μ΄λ μ μ λͺ
μΉμ΄ μλλΌλ λ§λ μμ΄ μ¬μ©νμ§ μμλ€.)
μ§κΈκΉμ§μ λ΄μ©μ ν λλ‘ μ 리νλ©΄ κ°μ²΄μ μμ±μ μμ ν λλ μ°Έμ‘° κ΄κ³μ§λ§ κ° μ체λ₯Ό μμ νλ κ²½μ° κ·Έ κ΄κ³κ° κΉ¨μ§λ€
λΌκ³ κ²°λ‘ μ λ΄λ¦΄ μ μλ€. λ, ν¨μ λ΄μμ μμκ°μ λ³κ²½νλ κ²½μ° κ°μ λ°λμ§ μμ§λ§, ν¨μ λ΄μμ κ°μ²΄μ μμ±μ λ³κ²½νλ κ²½μ° κ°μ΄ λ°λλ€.