[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์๋ ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค.
์ฐธ์กฐ
'Languages > Java Script' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Js] ์๋ฐ์คํฌ๋ฆฝํธ | html์์ javascript ๋ก๋ ํ๋ ๋ฐฉ๋ฒ (0) | 2021.02.07 |
---|---|
[Js] ํจํด | ์ฌ๊ทํจ์ (0) | 2021.02.04 |
[Js] ๋ฐ์ดํฐ ํ์ | ๋ ํผ๊ฐ์ฒด | ์์ ๋ฐ์ดํฐ ํ์ | ๊ฐ์ฒด ๋ฐ์ดํฐ ํ์ (0) | 2021.02.04 |
[Js] Object | Object์ ํ์ฅ | Object API (0) | 2021.02.04 |
๋น์ ์ด ์ข์ํ ๋งํ ์ฝํ ์ธ
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค