์ƒˆ์†Œ์‹

Languages/Java Script

[Js] ์ฐธ์กฐ | ๋ณต์ œ | ํ•จ์ˆ˜์™€ ์ฐธ์กฐ

  • -
๋ฐ˜์‘ํ˜•

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ "์ƒํ™œ์ฝ”๋”ฉ"์˜ ์ด๊ณ ์ž‰ ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ฌ๋ฆฐ ๊ฒŒ์‹œ๊ธ€ ์ž…๋‹ˆ๋‹ค.

์ƒ์—…์ ์ธ ์šฉ๋„๊ฐ€ ์•„๋‹Œ, ๊ฐœ์ธ ๊ณต๋ถ€ ์ •๋ฆฌ ๋ชฉ์ ์œผ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ž„์„ ๋ฏธ๋ฆฌ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

 

 


 


๋ณต์ œ

 

์ „์žํ™”๋œ ์‹œ์Šคํ…œ์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํŠน์ง•์€ ๋ณต์ œ๋‹ค.

ํ˜„์‹ค์˜ ์‚ฌ๋ฌผ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ „์žํ™”๋œ ์‹œ์Šคํ…œ ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์ œ ํ•˜๋Š”๋ฐ๋Š” ๋น„์šฉ์ด ๊ฑฐ์˜ ๋“ค์ง€ ์•Š๋Š”๋‹ค.

๋ฐ”๋กœ ์ด๋Ÿฌํ•œ ํŠน์ง•์ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ธฐ์กด์˜ ์‚ฐ์—…๊ณผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐ€์žฅ ํฐ ํŠน์ง•์ผ ๊ฒƒ์ด๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋ณต์ œ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์‚ดํŽด๋ณด์ž.

 

<script>
    var a = 1;//a=1์ด๋จ
    var b = a;//a๋ฅผ b์— ๋‹ด์Œ, b =1
    b = 2; //b=2
    console.log(a); //a= 1
</script>

๊ฒฐ๊ณผ๋Š” 1 ์ด๋‹ค.

 

๊ฒฐ๊ณผ๋Š” ๋‹น์—ฐํ•˜๋‹ค. ๊ฐ’์„ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์€ ๋ณ€์ˆ˜ b์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜ a์— ๋‹ด๊ฒจ์žˆ๋Š” ๊ฐ’์€ ๊ทธ๋Œ€๋กœ์ด๋‹ค.

๋ณ€์ˆ˜ b์˜ ๊ฐ’์— ๋ณ€์ˆ˜ a์˜ ๊ฐ’์ด ๋ณต์ œ๋œ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œ์‹œํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

์œ„์™€ ๊ฐ™์ด ๋ณ€์ˆ˜์— ๋‹ด๊ฒจ์žˆ๋Š” ๊ฐ’์ด ์›์‹œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ธ ๊ฒฝ์šฐ์—๋Š” "๋ณต์ œ"๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ด๊ธด ๊ฐ’์ด ๊ฐ์ฒด์ธ ๊ฒฝ์šฐ "์ฐธ์กฐ"์ผ์–ด๋‚œ๋‹ค.

 

 

์ฐธ์กฐ

๊ทธ๋Ÿฐ๋ฐ ์ž์—ฐ์˜ ์‚ฐ๋ฌผ์ด ์•„๋‹ˆ๋ผ ๊ฑฐ๋Œ€ํ•œ ์•ฝ์†์˜ ์ง‘ํ•ฉ์ธ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์„ธ๊ณ„์—์„œ ๋‹น์—ฐํ•œ ๊ฒƒ์€ ์—†๋‹ค.

์ด๊ฒƒ์ด ๋‹น์—ฐํ•˜์ง€ ์•Š์€ ์ด์œ ๋Š” ๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด์„œ ์ข€ ๋” ๋ถ„๋ช…ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚œ๋‹ค.

 

<script>
    var a = {'id':1};
    var b = a;
    b.id = 2;
    console.log(a.id);  // 2
</script>

๊ฒฐ๊ณผ๋Š” 2 ์ด๋‹ค. ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด์ž.

 

 

 

 

 

์ด ์ฝ”๋“œ์˜ ์ฃผ์ธ๊ณต์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

b.id = 2;
System.out.println(a.id);

 

โ–ผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ธฐ

๋”๋ณด๊ธฐ

๋†€๋ผ์šด ์ฐจ์ด์ ์ด ์žˆ๋‹ค. ๋ณ€์ˆ˜ b์— ๋‹ด๊ธด ๊ฐ์ฒด์˜ id ๊ฐ’์„ 2๋กœ ๋ณ€๊ฒฝํ–ˆ์„ ๋ฟ์ธ๋ฐ a.id์˜ ๊ฐ’๋„ 2๊ฐ€ ๋œ ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ์€ ๋ณ€์ˆ˜ b์™€ ๋ณ€์ˆ˜ a์— ๋‹ด๊ธด ๊ฐ์ฒด๊ฐ€ ์„œ๋กœ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋‹ค.

 

๋น„์œ ํ•˜์ž๋ฉด ๋ณต์ œ๋Š” ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์ด๊ณ  ์ฐธ์กฐ๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ(symbolic link) ํ˜น์€ ๋ฐ”๋กœ๊ฐ€๊ธฐ(์œˆ๋„์šฐ)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•˜๋‹ค. ์›๋ณธ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋งŒ๋“ค๋ฉด ์›๋ณธ์ด ์ˆ˜์ •๋˜๋ฉด ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์—๋„ ๊ทธ ๋‚ด์šฉ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋‹ค.

 

์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ํ†ตํ•ด์„œ ๋งŒ๋“  ํŒŒ์ผ์€ ์›๋ณธ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ฃผ์†Œ ๊ฐ’์ด ๋‹ด๊ฒจ ์žˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์— ์ ‘๊ทผํ•˜๋ฉด ์ปดํ“จํ„ฐ๋Š” ์‹ฌ๋ณผ๋ฆญ ๋งํฌ์— ์ €์žฅ๋œ ์›๋ณธ์˜ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•ด์„œ ์›๋ณธ์˜ ์œ„์น˜๋ฅผ ์•Œ์•„๋‚ด๊ณ  ์›๋ณธ์— ๋Œ€ํ•œ ์ž‘์—…์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ ์›๋ณธ์„ ๋ณต์ œํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์›๋ณธ ํŒŒ์ผ์„ ์ฐธ์กฐ(reference)ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. ๋•๋ถ„์— ์ €์žฅ ์žฅ์น˜์˜ ์šฉ๋Ÿ‰์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ณ , ์›๋ณธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๋ณต์ œ๋ณธ์ด ๋™์ผํ•œ ๋‚ด์šฉ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ฐธ์กฐ๋Š” ์ „์žํ™”๋œ ์„ธ๊ณ„์˜ ๊ทน์น˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ๊ฐœ๋…๋„ ์ผ์ข…์˜ ์ฐธ์กฐ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณต์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ํ•˜๋‚˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ณต์œ ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‚ด์šฉ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ์ด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋„ ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜๊ฒŒ ๋œ๋‹ค. ๋˜ ์šฐ๋ฆฌ๊ฐ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋„ ๋งํ•˜์ž๋ฉด ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด์„œ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. 

 

๊ทธ๋Ÿฐ๋ฐ, ์œ„์˜ ์ฝ”๋“œ์—์„œ ๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด a.id์˜ ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค. ์™œ๊ทธ๋Ÿด๊นŒ?

<script>
    var a = {'id':1};
    var b = a;
    b = {'id':2}
    //b.id = 2;
    console.log(a.id);  // 2
</script>

์œ„์™€ ๊ฐ™์ด a๋ฅผ b์— ๋‹ด์œผ๋ฉด ๋ณ€์ˆ˜ b์˜ ๊ฐ’์€ a์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ b๊ฐ€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋‹ด๊ฒŒ ๋˜๋ฉด์„œ, ์ฒ˜์Œ a๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋˜ ๊ฐ์ฒด์™€๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

์ฆ‰ ๊ฐ๊ฐ์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ฒŒ ๋˜๋ฏ€๋กœ, b์˜ ๊ฐ’์„ ๋ฐ”๊พผ๋‹ค ํ•˜์—ฌ๋„ a์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๊ฒƒ์ด๋‹ค.

 

 

์•„๋ž˜ ๋‘ ๊ฐœ์˜ ๊ตฌ๋ฌธ์˜ ์ฐจ์ด์ ์„ ์ƒ๊ฐํ•ด๋ณด์ž.

a = 1;
a = {'id':1};

๋ฌด์—‡์ผ๊นŒ? ์ „์ž๋Š” ๋ฐ์ดํ„ฐํ˜•์ด ์ˆซ์ž์ด๊ณ  ํ›„์ž๋Š” ๊ฐ์ฒด๋‹ค.

์ˆซ์ž๋Š” ์›์‹œ ๋ฐ์ดํ„ฐํ˜•(๊ธฐ๋ณธ ๋ฐ์ดํ„ฐํ˜•, Primitive Data Types)์ด๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์›์‹œ ๋ฐ์ดํ„ฐํ˜•์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ๊ฐ์ฒด์ด๋‹ค. ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ ๋ง๋กœ๋Š” ์ฐธ์กฐ ๋ฐ์ดํ„ฐ ํ˜•(์ฐธ์กฐ ์ž๋ฃŒํ˜•)์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐํ˜•์€ ์œ„์™€ ๊ฐ™์ด ๋ณต์ œ ๋˜์ง€๋งŒ ์ฐธ์กฐ ๋ฐ์ดํ„ฐํ˜•์€ ์ฐธ์กฐ๋œ๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด๋Š” ์ฐธ์กฐ ๋ฐ์ดํ„ฐํ˜•์ด๋‹ค. 

 

์ •๋ฆฌํ•˜๋ฉด ๋ณ€์ˆ˜์— ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์›์‹œํ˜•์ด๋ฉด ๊ทธ ์•ˆ์—๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์žˆ๊ณ , ๊ฐ์ฒด๋ฉด ๋ณ€์ˆ˜ ์•ˆ์—๋Š” ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ ๋ฐฉ๋ฒ•์ด ๋“ค์–ด์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ํ•จ์ˆ˜

 

๊ทธ๋Ÿผ ์ผ์ข…์˜ ๋ณ€์ˆ˜ํ• ๋‹น์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”๊ฐ€๋ฅผ ์‚ดํŽด๋ณด์ž. 

 

๋จผ์ € ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์›์‹œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ธ์ž๋กœ ๋„˜๊ฒผ์„ ๋•Œ์˜ ๋™์ž‘ ๋ชจ์Šต์ด๋‹ค.

<script>
    var a = 1;
    function func(b){ //์ด ์ฝ”๋“œ๋กœ ๋“ค์–ด์˜ค๋ฉด a=1 -> b = a ์ฆ‰ b๋Š” 1์ด๋‹ค.
        b = 2; //b๊ฐ€ 2 ๋กœ ๋ฐ”๋€œ.
    }
    func(a); //๊ฒฐ๊ตญ a =b๋ผ๋Š” ์ฝ”๋“œ์™€ ๋™์ผํ•œ ๊ฒƒ
    console.log(a);//a์˜ ๊ฐ’์—๋Š” ๋ณ€๋™์ด ์—†์Œ. ๋ณต์ œ์˜ ์˜ˆ์ž„
</script>

์ฆ‰ ๊ฒฐ๊ณผ๋Š” 1์ด๋‹ค.

 

 

๋‹ค์Œ์€ ์ฐธ์กฐ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ธ์ž๋กœ ๋„˜๊ฒผ์„ ๋•Œ ๋™์ž‘ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

<script>
    var a = {'id':1};
    function func(b){ //b=a ๋‘˜์€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
        b = {'id':2}; //์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ ํ›„ b์— ํ• ๋‹น 
    }
    func(a); //a = {id:1}
    console.log(a.id);  // 4๋ฒˆ์งธ ์ค„ ์ฝ”๋“œ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ ๋‘˜์€ ๋ถ„๋ฆฌ๊ฐ€ ๋˜์–ด, b์˜ ๋ณ€ํ™”์™€ ๋ฌด๊ด€
</script>

์ด๊ฒƒ ๋˜ํ•œ b๊ฐ€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋‹ด์Œ์œผ๋กœ์จ ๊ฒฐ๊ณผ๊ฐ€ 1์ด๋œ๋‹ค.

 

 

ํ•˜์ง€๋งŒ ์•„๋ž˜๋Š” ๋‹ค๋ฅด๋‹ค.

<script>
    var a = {'id':1};
    function func(b){ //b=a ๋‘˜์€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
        b.id = 2; //๋‘˜์€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ. id๋ผ๋Š” ์†์„ฑ์˜ ๊ฐ’์„ 2๋กœ ๋ฐ”๊พธ์–ด ๋ฒ„๋ฆฐ ๊ฒƒ.
    }
    func(a); //a = {id:1}
    console.log(a.id);  //b์˜ ๋ณ€ํ™”๊ฐ€ a์—๋„ ์ ์šฉ์ด๋จ.
</script>

ํŒŒ๋ผ๋ฏธํ„ฐ b๋Š” ๊ฐ์ฒด a์˜ ๋ ˆํผ๋Ÿฐ์Šค๋‹ค. ์ด ๊ฐ’์˜ ์†์„ฑ์„ ๋ฐ”๊พธ๋ฉด ๊ทธ ์†์„ฑ์ด ์†Œ์†๋œ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ˆ˜์ •์ž‘์—…์„ ํ•œ ๊ฒƒ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— b์˜ ๋ณ€๊ฒฝ์€ a์—๋„ ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ฒŒ ๋œ๋‹ค.

 

์ฐธ์กฐ

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.