Bibi's DevLog ๐Ÿค“๐ŸŽ

[์ธํ”„๋Ÿฐ]Javascript์ž…๋ฌธ - ์ฐธ์กฐ ๋ณ€์ˆ˜์™€ Call by Reference (์ฐธ์กฐ๋ณ€์ˆ˜/์ผ๋ฐ˜๋ณ€์ˆ˜, call by Value/call by Reference) ๋ณธ๋ฌธ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ/Javascript ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

[์ธํ”„๋Ÿฐ]Javascript์ž…๋ฌธ - ์ฐธ์กฐ ๋ณ€์ˆ˜์™€ Call by Reference (์ฐธ์กฐ๋ณ€์ˆ˜/์ผ๋ฐ˜๋ณ€์ˆ˜, call by Value/call by Reference)

๋น„๋น„ bibi 2020. 10. 21. 22:19
* ์ด ๊ธ€์€ ์ธํ”„๋Ÿฐ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ˜ธ๋ˆ…์Šค๋‹˜์˜ ์œ ๋ฃŒ ๊ฐ•์˜ '์‰ฝ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋ฐฐ์›Œ๋ณด๋Š” Javascript ์ž…๋ฌธ - ์ฝ”๋“œ์Šค์ฟผ๋“œ ๋งˆ์Šคํ„ฐ์ฆˆ ์ฝ”์Šค ๋ ˆ๋ฒจ1'๋ฅผ ๋“ฃ๊ณ  ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๊ฐ•์˜ ๋‚ด์šฉ์— ๋”ํ•ด, ์ œ๊ฐ€ ํ•„๊ธฐํ•˜๊ณ  ๊ตฌ๊ธ€๋งํ•œ ๋‚ด์šฉ์ด ์ •๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ดˆ๋ณด์ธ ์ œ๊ฐ€ ์ดํ•ดํ•œ ๋Œ€๋กœ ์ •๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ถ€์ •ํ™•ํ•œ ๋‚ด์šฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ๊ฐ์•ˆํ•ด ์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ธ€์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ธํ”„๋Ÿฐ ์ธก ๋‹ต๋ณ€์„ ๋ฐ›์€ ์ ์ด ์žˆ์œผ๋‚˜(https://bibi6666667.tistory.com/37), ์ €์ž‘๊ถŒ์ƒ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค๋ฉด ๋ณดํ˜ธ ๋ชจ๋“œ(๋น„๊ณต๊ฐœ)๋กœ ์ „ํ™˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ ์ดํ•ดํ•˜๊ธฐ

 

์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ(call by Value)๊ณผ ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ(call by Reference) ์„ ๋น„๊ตํ•ด ๋ณผ ๊ฒƒ์ด๋‹ค.

๋ณ€์ˆ˜์—๋Š” ๋‘ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค : ์ฐธ์กฐ ๋ณ€์ˆ˜์™€ ์ผ๋ฐ˜ ๋ณ€์ˆ˜.

 

์ฐธ์กฐ ๋ณ€์ˆ˜์™€ ์ผ๋ฐ˜ ๋ณ€์ˆ˜ (์ฐธ์กฐ ํƒ€์ž…๊ณผ ์›์‹œ ํƒ€์ž…)

"๊ฐ์ฒด"๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์ฐธ์กฐ ๋ณ€์ˆ˜๊ฐ€ ๋˜๊ณ ,
"๊ธฐ๋ณธ ํƒ€์ž…"์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์ผ๋ฐ˜ ๋ณ€์ˆ˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

- ์ฐธ์กฐ ๋ณ€์ˆ˜(์ฐธ์กฐ ํƒ€์ž…, reference type) : ๋ฐฐ์—ด ๋“ฑ์˜ "๊ฐ์ฒด"๊ฐ€ ํ• ๋‹น๋œ ๋ณ€์ˆ˜.
 (์ฐธ์กฐ ๋ณ€์ˆ˜์—๋Š” ๊ฐ์ฒดobject, ๋ฐฐ์—ดarray, ํ•จ์ˆ˜function ๊ฐ€ ํ•ด๋‹น๋œ๋‹ค)
- ์ผ๋ฐ˜ ๋ณ€์ˆ˜(์›์‹œ ํƒ€์ž…, primitive type) : ์ฐธ์กฐ ๋ณ€์ˆ˜ ์™ธ์— ๋‚˜๋จธ์ง€ ๋ณ€์ˆ˜. <- ๊ธฐ๋ณธ ํƒ€์ž…(์ž๋ฃŒํ˜•)์ด ํ• ๋‹น๋œ ๋ณ€์ˆ˜.
 (์ผ๋ฐ˜ ๋ณ€์ˆ˜์—๋Š” ์ˆซ์žnumber, ๋ฌธ์ž์—ดstring, ์ฐธ/๊ฑฐ์ง“boolean, null, undefined ๊ฐ€ ํฌํ•จ๋œ๋‹ค)

โ€ป ์ฐธ๊ณ  : ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ "ํด๋ž˜์Šคclass"๋ผ๋Š” ๊ฐœ๋…์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ "์ฐธ์กฐํƒ€์ž…/์›์‹œํƒ€์ž…" ์— ํ•ด๋‹น๋œ๋‹ค.

(๊ทธ๋ƒฅ ์™ธ์šฐ๊ธฐ)

/////// ์ผ๋ฐ˜ ๋ณ€์ˆ˜ : ๊ธฐ๋ณธ ํƒ€์ž…(์ž๋ฃŒํ˜•)์ด ํ• ๋‹น๋œ ๋ณ€์ˆ˜.
var a = 10;
var b = "hello" 
// ๋ณ€์ˆ˜ a์— number(์ˆซ์ž)๋ฅผ ํ• ๋‹นํ–ˆ์œผ๋ฏ€๋กœ a๋Š” ์ผ๋ฐ˜๋ณ€์ˆ˜์ด๋‹ค.
// ๋ณ€์ˆ˜ b์— string(๋ฌธ์ž์—ด)์„ ํ• ๋‹นํ–ˆ์œผ๋ฏ€๋กœ b๋Š” ์ผ๋ฐ˜๋ณ€์ˆ˜์ด๋‹ค.

var c = 5 > 3; 
c; //true 
// ๋ณ€์ˆ˜ c์— true(์ฐธ/๊ฑฐ์ง“)์„ ํ• ๋‹นํ–ˆ์œผ๋ฏ€๋กœ c๋Š” ์ผ๋ฐ˜๋ณ€์ˆ˜์ด๋‹ค.


/////// ์ฐธ์กฐ ๋ณ€์ˆ˜ : ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น๋œ ๋ณ€์ˆ˜.
var d = [1, 2, 3, 4, 5]; 
// ๋ณ€์ˆ˜ d์— ๋ฐฐ์—ด์„ ํ• ๋‹นํ–ˆ์œผ๋ฏ€๋กœ d๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜์ด๋‹ค.
// (๋ฐฐ์—ด๋„ ๊ฐ์ฒด์ด๋‹ค!)

var e = {};
e.name = "honux";
e; 
// {name: "honux"}. ๋ณ€์ˆ˜ e์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ–ˆ์œผ๋ฏ€๋กœ e๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜์ด๋‹ค.

 

 

(์ผ๋ฐ˜ ๋ณ€์ˆ˜์˜ ํŠน์ง•) ์ผ๋ฐ˜ ๋ณ€์ˆ˜์—์„œ ๊ฐ’ ๋ณต์‚ฌํ•˜๊ธฐ ๋ฐ ๋ฐ”๊พธ๊ธฐ

์ผ๋ฐ˜ ๋ณ€์ˆ˜๋Š” "๊ฐ’"์„ ๋ณต์‚ฌํ•ด ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๊ณ , ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์–ธ์ œ๋‚˜ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
(๋‹ค๋ฅธ ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€Œ๋”๋ผ๋„ ์› ๋ณ€์ˆ˜๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค)

var a = 10;
var a2 = a; // ๋ณ€์ˆ˜ a์˜ ๊ฐ’์„ ์ฝ์–ด์„œ, a2์— ๋Œ€์ž…ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜๋ณ€์ˆ˜ a2์—๋Š” ๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.
a; // 10
a2; // 10 
a2 === a // true
// ๋ณ€์ˆ˜ a์™€ a2๋Š” ๋‘˜ ๋‹ค 10์ด๋ฏ€๋กœ ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ true๊ฐ€ ๋‚˜์˜จ๋‹ค.

// a๋ฅผ 15๋กœ ๋ฐ”๊ฟ” ๋ณธ๋‹ค.
a = 15
a; // 15
a2; // 10
a2 === a // false
// ๋ณ€์ˆ˜ a๋Š” 15, ๋ณ€์ˆ˜ a2๋Š” 10์ด๋ฏ€๋กœ ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค. ๋”ฐ๋ผ์„œ false๊ฐ€ ๋‚˜์˜จ๋‹ค (๋‹น์—ฐ)

// ๋ฌธ์ž์—ดstring๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

var s1 = "hello";
var s2 = s1;
s1; // "hello"
s2; // "hello"
s1 === s2 // true
// ๋ณ€์ˆ˜ s1๊ณผ s2๋Š” ๋‘˜ ๋‹ค "hello"์ด๋ฏ€๋กœ ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ true๊ฐ€ ๋‚˜์˜จ๋‹ค.

s1 = "hell";
s1 === s2 // false
// ๋ณ€์ˆ˜ s1์€ "hell", ๋ณ€์ˆ˜ s2๋Š” "hello"์ด๋ฏ€๋กœ ๊ฐ™์ง€ ์•Š๋‹ค. ๋”ฐ๋ผ์„œ false๊ฐ€ ๋‚˜์˜จ๋‹ค.

์œ„ ์ฝ”๋“œ์—์„œ a์™€ a2, s1๊ณผ s2๋Š” ์ฒ˜์Œ์— ๊ฐ’์€ ๊ฐ™์ง€๋งŒ ์‚ฌ์‹ค์€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

 

 

์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ๋™์ž‘ ๋ฐฉ์‹ ์ดํ•ดํ•˜๊ธฐ

์ฐธ์กฐ ๋ณ€์ˆ˜์—๋Š” ์ผ๋ฐ˜ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ๊ฐ’์ด ๋“ค์–ด์žˆ์ง€ ์•Š๊ณ , "์ฐธ์กฐ"๋งŒ ๋“ค์–ด์žˆ๋‹ค.

์ฐธ์กฐ ๋ณ€์ˆ˜๋ผ๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ณ„๋ช… ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๋ฉด ๊ฐ์ฒด๊ฐ€ ์ƒ๊ธฐ๊ณ  ๋ณ€์ˆ˜์—๋Š” ๊ทธ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฑด๋ฐ..... ๋ฌด์Šจ ๋ง์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ฃ ?

๊ฐ™์€ ์‚ฌ๋žŒ์„ ์ด๋ฆ„์œผ๋กœ๋„ ๋ถ€๋ฅด๊ณ , ๋ณ„๋ช…์œผ๋กœ๋„ ๋ถ€๋ฅด๊ณ , ํ˜•์˜ค๋น ์–ธ๋‹ˆ๋ˆ„๋‚˜์‚ผ์ดŒ๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ํ˜ธ์นญ์œผ๋กœ ๋ถ€๋ฅด๋Š” ๊ฒƒ๊ณผ ์กฐ๊ธˆ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.
(๋ช…์นญ์€ ๊ฐ๊ฐ ๋‹ค๋ฅด์ง€๋งŒ, ๊ฐ๊ฐ์˜ ๋ช…์นญ์ด ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ์€ ๊ฐ™๋‹ค)

์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ๊ณ ์–‘์ดA๋ฅผ "์•ผ์˜น์ด"๋ผ๊ณ ๋„ ๋ถ€๋ฅด๊ณ  "๋‚˜๋น„"๋ผ๊ณ ๋„ ๋ถ€๋ฅด๊ณ  "์• ์šฉ์ด"๋ผ๊ณ ๋„ ๋ถ€๋ฅด์ง€๋งŒ,
"์•ผ์˜น์ด","๋‚˜๋น„","์• ์šฉ์ด"๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ์€ ๊ณ ์–‘์ดA๋กœ ๋ชจ๋‘ ๊ฐ™๋‹ค.
๋งŒ์•ฝ ๊ณ ์–‘์ดA์˜ ๋ชธ๋ฌด๊ฒŒ๊ฐ€ 1kg๊ฐ€ ์ฐŒ๋ฉด, "์•ผ์˜น์ด","๋‚˜๋น„","์• ์šฉ์ด"๋„ 1kg๊ฐ€ ์ฐ” ๊ฒƒ์ด๋‹ค.

โž• ์ฐธ์กฐ ๊ฐ’ reference value : '๊ฐ์ฒด'์™€ ๊ฐ™์€ ๋ง์ด๋‹ค.

 

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”.

var arr1 = [1, 2, 3, 4, 5];
var arr2 = arr1;
arr2; // [1, 2, 3, 4, 5]

arr1.push(6);
arr1; // [1, 2, 3, 4, 5, 6]
arr2; // [1, 2, 3, 4, 5, 6]
arr1.push(10);
arr1; // [1, 2, 3, 4, 5, 6, 10]
arr2; // [1, 2, 3, 4, 5, 6, 10]

arr1 === arr2 // true
์ฐธ์กฐ ๋ณ€์ˆ˜์˜ ํŠน์ง• : ์› ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋€Œ๋ฉด, ์ฐธ์กฐ ๋ณ€์ˆ˜๋„ ๋˜‘๊ฐ™์ด ๋ฐ”๋€๋‹ค.
์ฐธ์กฐ ๋ณ€์ˆ˜๋Š” ์› ๋ณ€์ˆ˜์™€ ์™„์ „ํžˆ ๋˜‘๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์—, arr1 === arr2๋Š” ์–ธ์ œ๋‚˜ true์ด๋‹ค.

โ“ ์™œ?
arr1๋„, arr2๋„ [1, 2, 3, 4, 5, 6, 10]์ด๋ผ๋Š” ๊ฐ™์€ ๋Œ€์ƒ(๋ฐฐ์—ด=๊ฐ์ฒด)์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜์˜ ๊ฐ’์€ ํ•ญ์ƒ ๊ฐ™๋‹ค.
์ผ๋ฐ˜ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ, ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ "์ฐธ์กฐ๋ณ€์ˆ˜"์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•˜๋‹ค.

// ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ
var p1 = {};
var p2 = p1;
p1 === p2; // true
p1.name = "honux";
p1 === p2 // true.
p1; // {name: "honux"}
p2; // {name: "honux"}

var m1 = {name: "honux", age: 25};
var m2 = m1;
m1 === m2; // true
m2.name = "crong";
m2; // {name: "crong", age: 25};
m1; // {name: "crong", age: 25};
m1 === m2; // true
- ๊ฐ™์€ ๋Œ€์ƒ์„ ์ฐธ์กฐํ•˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๋ผ๋ฆฌ๋Š” ์–ธ์ œ๋‚˜ ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
- ํ•œ ์ฐธ์กฐ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊พธ์–ด๋„ "์ฐธ์กฐ ๋Œ€์ƒ"์˜ ๊ฐ’์ด ๋ฐ”๋€Œ๋ฏ€๋กœ, ๋‘ ์ฐธ์กฐ๋ณ€์ˆ˜๋Š” ๊ฐ™๋‹ค.

์ผ๋ฐ˜ ๋ณ€์ˆ˜์™€๋Š” ์ „ํ˜€ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™”์ฃ ? ์™œ ๊ทธ๋Ÿฐ์ง€๋Š” ๋‚˜์ค‘์— ์ €์ ˆ๋กœ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ผ๋‹จ ์ด๊ฒŒ ์ฐธ์กฐ ๋ณ€์ˆ˜๊ตฌ๋‚˜ํ•˜๊ณ  ๊ธฐ์–ตํ•ด ๋‘ก์‹œ๋‹ค.

 


 

ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ์˜ ๋ณ€์ˆ˜

ํ•จ์ˆ˜์—์„œ ๋‘ ์ฝ”๋“œ์˜ ๋™์ž‘ ์ฐจ์ด๋ฅผ ๋ด…์‹œ๋‹ค.

- ์ผ๋ฐ˜ ๋ณ€์ˆ˜ primitive type : ๊ฐ’์— ์˜ํ•œ ์ „๋‹ฌ. call by Value
- ์ฐธ์กฐ ๋ณ€์ˆ˜ reference type : ์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ. call by Reference

์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด ๋ณด์ž.

 

๊ฐ’ ์ „๋‹ฌ call by Value (์ผ๋ฐ˜ ๋ณ€์ˆ˜)

var foo = function(v) { 
    v = v * 2;
    console.log("foo: " + v);  
}

var n = 10; 
foo(n); // foo: 20 ์ด ์ถœ๋ ฅ๋œ๋‹ค.
n; // 10.
ํ•จ์ˆ˜ foo(v)์— n์ด๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์˜ "๊ฐ’"์ธ 10์ด ๋“ค์–ด๊ฐ€, 2๊ฐ€ ๊ณฑํ•ด์ง€๊ณ  ์ฝ˜์†” ์ฐฝ์— ์ฐํžŒ๋‹ค.
n์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒŒ ์•„๋‹Œ, n์˜ "๊ฐ’"์ธ 10์ด ๋“ค์–ด๊ฐ€๊ธฐ ๋–„๋ฌธ์— n์€ ๊ทธ๋Œ€๋กœ์ด๋‹ค.

 

์ฐธ์กฐ ์ „๋‹ฌ call by Reference (์ฐธ์กฐ ๋ณ€์ˆ˜)

// ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ
var arr = [1, 2, 3, 4, 5];
var append = function(arr, v) [
	arr.push(v);
};
append(arr, 10);
arr; // [1, 2, 3, 4, 5, 10]

var a = []; // ๋น„์–ด ์žˆ๋Š” ๋ฐฐ์—ด.
append(a2, 1);
a2; // [1]
append(a2, 2);
a2; // [1, 2]
append(a2, 100);
a2; // [1, 2, 100]

- ๋ฐฐ์—ด๋„ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ฐธ์กฐ์— ์˜ํ•ด ๊ฐ’์ด ์ „๋‹ฌ(call by Reference)๋˜์–ด
ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฐ”๊พผ ๊ฐ’์ด ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ๋„ ๋ฐ”๋€๋‹ค.
(ํ•จ์ˆ˜ append ๋‚ด์—์„œ .push();๋ฅผ ํ•˜๋ฉด ํ•จ์ˆ˜ ๋ฐ”๊นฅ์˜ arr๊ฐ’๋„ ๋ณ€ํ•œ๋‹ค.)

// ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ
var p1 = {name : "honux"}
p1.weight = 67;
p1; // {name : "honux", weight : 67}

var diet = function(people) {
	people.weight -= 1;
    console.log("%s %d", people.name, people.weight);
};
diet(p1); // honux 66 
// ์ฒด์ค‘์ด 1 ๊ฐ์†Œํ–ˆ๋‹ค.
p1; // {name: "honux", weight: 61}

- ๊ฐ์ฒด p1 ์—ญ์‹œ ์ฐธ์กฐ์— ์˜ํ•ด ๊ฐ’์ด ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—,
ํ•จ์ˆ˜ diet();๋‚ด์—์„œ people.weight๋ฅผ -1์”ฉ ๋นผ๋ฉด ํ•จ์ˆ˜ ๋ฐ”๊นฅ์˜ p1.weight๋„ -1์”ฉ ๋น ์ง„๋‹ค

โœ” ์ผ๋ฐ˜ ๋ณ€์ˆ˜('๊ฐ’ ์ฐธ์กฐ' ์˜ˆ์ œ)์™€ ๋‹ค๋ฅด๊ฒŒ..
ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฐธ์กฐ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ณ , ํ•จ์ˆ˜ ์•ˆ์—์„œ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ํ•จ์ˆ˜ ๋ฐ”๊นฅ์˜ ๊ฐ์ฒด๋„ ๊ฐ’์ด ๋ฐ”๋€๋‹ค.
์™œ? p1๊ณผ people์ด ๊ฐ™๊ธฐ ๋•Œ๋ฌธ!
-> ์ด๋Ÿฌํ•œ ๊ฐ’ ์ „๋‹ฌ๋ฐฉ์‹์„ "์ฐธ์กฐ์— ์˜ํ•œ ์ „๋‹ฌ" call by Reference ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

์š”์•ฝ

  • ๊ฐ’ ์ „๋‹ฌ ๋ณ€์ˆ˜(=์ผ๋ฐ˜๋ณ€์ˆ˜, primitive type)๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๊ฐ’์„ ๋ฐ”๊ฟ”๋„ ์™ธ๋ถ€์—์„œ๋Š” ๊ทธ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค.
    ์™œ? ์ผ๋ฐ˜๋ณ€์ˆ˜๋Š” ๊ฐ’๋งŒ ์ „๋‹ฌํ•ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ.
  • ์ฐธ์กฐ ์ „๋‹ฌ ๋ณ€์ˆ˜(=์ฐธ์กฐ๋ณ€์ˆ˜, reference type)๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ์™ธ๋ถ€์˜ ๊ฐ์ฒด๋„ ๊ฐ’์ด ๋ฐ”๋€๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ์‹œ๊ฐ„์€ ์•„์ฃผ ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ผญ ์ˆ™์ง€ํ•˜๊ณ  ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.