์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- Git๋ช ๋ น์ด
- branch ์ญ์
- ๋งํฌ๋ค์ด
- ๋ธ๋์น ํ์ธ
- ์ฝ๋๋ธ๋ญ
- ์ฝ๋๋ธ๋ก
- ๋ธ๋์น ์์ฑ
- ![rejected]
- ๋ธ๋์น ์ญ์
- branch ์์ฑ
- branch ํ์ธ
- markdown
- Today
- Total
DevLog
Primitive type & Reference type ๋ณธ๋ฌธ
<์์ ์๋ฃํ & ์ฐธ์กฐ ์๋ฃํ>
๋ฌธ์ : ์ฝ๋๊ฐ ์คํ๋ ํ, x.foo์ ๊ฐ์ ๋ฌด์์ผ๊น์?
let x = { foo: 3 };
let y = x;
y.foo = 2;
// ์ค๋ต : 3
// ์ ๋ต : 2;
ํด์ค
์๋ฐ์คํฌ๋ฆฝํธ์์ ์์ ์๋ฃํ์ด ์๋ ๋ชจ๋ ๊ฒ์ Object ์ ๋๋ค. ๋ฐฐ์ด([])๊ณผ ๊ฐ์ฒด({}), ํจ์(function(){})๊ฐ ๋ํ์ ์ ๋๋ค. ์ด๋ฐ ์๋ฃํ์ ์ฐธ์กฐ ์๋ฃํ (reference data type)์ด๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์ฐธ์กฐ ์๋ฃํ์ด ๋ณ์์ ํ ๋น๋๋ ๊ฒฝ์ฐ๋, ๋ณ์์ ์ด ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณณ์ ์ฃผ์๊ฐ ํ ๋น์ด ๋ฉ๋๋ค.
๋ณ์๋ ์ฌ์ค ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ณด๋ค ์ธ๊ฐ์ด ์ดํดํ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ ๋ง๋ ๊ฐ๋ ์ ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ณ์์ ์ ์ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์๋ฆฌ๋ฅผ ์ก๋ ๊ฒ์ด๊ณ , ๊ฐ์ ํ ๋น์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ ์ฑ์ฐ๋ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
์์ ์๋ฃํ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์๋ ๋ค๋ฅด๊ฒ ํ๋์ ์ ๋ณด๋ง ๋ด๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณ์์ ์ง์ ๊ฐ์ ๋ณต์ฌํด๋ ํฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ณ์ ํ๋์ ๊ฐ ํ๋, ๋จ์ํ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
๊ฐ์ฒด์ ๋ฐฐ์ด์ ์กฐ๊ธ ๋ค๋ฆ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋๋์ ๋ฐ๋ผ์ ๋ด๊ธธ ์ ์๋ ์ ๋ณด์ ํฌ๊ธฐ๊ฐ ์ฒ์ฐจ๋ง๋ณ์ ๋๋ค. (100๋ง๊ฐ์ ํ์์ ๋ณด๊ฐ ๋ด๊ธด ๋ฐฐ์ด์ ์์ํด๋ด ์๋ค.) ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋์ (dynamic)์ผ๋ก ๋ณ์์ ํฌ๊ธฐ๊ฐ ๋ณํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ณ์์ ํ๋์ ๊ฐ์ฒด๋ฅผ ํต์งธ๋ก ๋ฃ์ ์ ์๋ ํฉ๋ฆฌ์ ์ธ ์ด์ ๊ฐ ์๊ธด๊ฑฐ์ฃ .
๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จธ๋ฆฌ๋ฅผ ์๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฉ๋ชจ๋ฆฌ์ ๊ณต๊ฐ์ ๋ด๊ฐ ์์์ ๋ถ์ฌํ๊ณ , ๋ณ์๋ ๊ทธ ๊ณต๊ฐ์ ์ฃผ์๋ง ์ฐธ์กฐํ๋๋ก ํ์! ๊ทธ๋์ ์ฐธ์กฐ ์๋ฃํ์ด ํ์ํ๊ฒ ๋ฉ๋๋ค.
let y = x;
๋ณ์ x๋ฅผ ๋ณ์ y์ ํ ๋นํ๋ ๊ฒฝ์ฐ, ๋ณ์ x์ ๊ฐ์ ์ฐธ์กฐ ์๋ฃํ์ด๊ธฐ ๋๋ฌธ์ x์ ๊ฐ { foo: 3 }์ ์ฃผ์๋ฅผ y์ ํ ๋นํฉ๋๋ค. ๊ฐ ์์ฒด๋ฅผ ํ ๋นํ๋ 1๋ฒ ๋ฌธ์ ์์ ์ฐจ์ด์ ์ด์ฃ .
์ด ์ํ๋ ๋ณ์ x์ ๋ณ์ y์ ๋ชจ๋ ๊ฐ์ { foo : 3 } ์ด๋ผ๋ ๊ฐ์ฒด์ ์ฃผ์๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์์ต๋๋ค.
y.foo = 2;
y.foo = 2, ๊ฐ์ด 3์ด์๋ y.foo์ 2๋ฅผ ํ ๋น์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด x.foo๋ ๋ฌด์์ผ๊น์? ํ์ฌ๋ ๊ฐ์ ์ฃผ์๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์๋ y.foo๊ฐ 2๋ก ๋ณ๊ฒฝ์ด ๋์์ผ๋, ๊ฐ์ ๊ณณ์ ๋ฐ๋ผ๋ณด๊ณ ์์๋ x.foo๋ 2๊ฐ ๋์ด์ผ ํฉ๋๋ค.
๋ฌธ์ : ์ฝ๋๊ฐ ์คํ๋ ํ, myArray์ ๊ฐ์ ๋ฌด์์ผ๊น์?
let myArray = [2, 3, 4, 5];
let ourArray = myArray; ourArray[2] = 25;
ourArray = undefined;
// ์ค๋ต : [2, 3, 4, 5]
// ์ ๋ต : [2, 3, 25, 5]
ํด์ค
let ourArray = myArray;
๋ณ์ ourArray์ myArray์ ์ฃผ์๊ฐ์ด ํ ๋น ๋์์ต๋๋ค.
ourArray[2] = 25;
ourArray ์ฃผ์๊ฐ์ ์์นํ ๋ฐฐ์ด์ ์ 2๋ฒ์งธ ์์๋ฅผ 25๋ก ๋ณ๊ฒฝํฉ๋๋ค. ourArray์ myArray์ ์ฃผ์๊ฐ์ ๊ฐ์์ผ๋ก ํ์ฌ myArray๋ [2, 3, 25, 5] ์ ๋๋ค.
ourArray = undefined;
์ด์ ๋ณ์ ourArray์ ์์ ์๋ฃํ undefined๊ฐ ํ ๋น๋์๊ธฐ ๋๋ฌธ์, myArray์ ์ ๊ทผํ ์ ์์ต๋๋ค. ํ์ง๋ง myArray๋ ๊ทธ๋๋ก [2, 3, 25, 5]์ด๊ธฐ ๋๋ฌธ์ ๋ต์ [2, 3, 25, 5] ์ ๋๋ค.
๋ฌธ์ : ์ฝ๋๊ฐ ์คํ๋ ํ, player.score์ ๊ฐ์ ๋ฌด์์ผ๊น์?
let player = { score: 3 };
function doStuff(obj) {
obj.score = 2;
}
doStuff(player);
// ์ค๋ต : undefined
// ์ ๋ต : 2
ํด์ค
doStuff(player);
ํจ์ doStuff์ ๋ณ์ player๋ฅผ ์ธ์๋ก ์ ๋ฌํ์ฌ ํธ์ถํฉ๋๋ค. (์คํํฉ๋๋ค.)
function doStuff(obj) { obj.score = 2; }
ํจ์๊ฐ ํธ์ถ๋๋ฉด (์คํ๋๋ฉด) ๋งค๊ฐ๋ณ์ obj์ ๋ณ์ player์ ๊ฐ์ด ํ ๋น๋ฉ๋๋ค. { score: 3 }์ ์ฃผ์๊ฐ์ด๊ฒ ์ฃ ? obj.score์ 2๋ฅผ ํ ๋นํ๋ฉด, obj์ player๋ ๊ฐ์ ์ฃผ์๊ฐ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, player.score๋ 2๊ฐ ๋๊ฒ ๋ฉ๋๋ค. ์ ๋ต์ 2์ ๋๋ค.
๋ฌธ์ : ์ฝ๋๊ฐ ์คํ๋ ํ, score ์ ๊ฐ์ ๋ฌด์์ผ๊น์?
let score = 80;
function doStuff(value) {
value = 90;
}
doStuff(score)
// ์ค๋ต : undefined
// ์ ๋ต : 80
ํด์ค
doStuff(score)
ํจ์ doStuff์ score์ ๊ฐ์ ์ธ์๋ก ์ ๋ฌํ์ฌ ์คํํฉ๋๋ค.
function doStuff(value) { value = 90; }
๋งค๊ฐ๋ณ์ value์ score์ ๊ฐ 80์ด ์ ๋ฌ๋๊ณ ,
value = 90์์ value์ 90์ด ํ ๋น๋ฉ๋๋ค.
๋ค๋ง ๋ณ์ score์ ๊ฐ 80์, ์ฐธ์กฐ ์๋ฃํ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ฃผ์๊ฐ์ ์ ๋ฌํ์ง ์๊ณ , ๊ฐ ์์ฒด๋ฅผ ๋ณต์ฌํ์ฌ ์ ๋ฌํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋์ ํจ์์์ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋๊ฐ์ ๊ด๋ จ์ด ์์ด score๋ ์ด๊ธฐ์ ํ ๋น๋ ๊ฐ 80์ด ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค. ์ ๋ต์ 80์ ๋๋ค.
'๐ง๐ปโ๐ป ๊ฐ๋ฐ๊ฐ๋ฐ > ๊ธฐํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์์๋ณด๊ธฐ ์ฌ์ด ์ฝ๋ ์์ฑ๋ฒ (0) | 2021.06.16 |
---|---|
Google์๋ณด๋ค ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ํ 20 ๊ฐ์ง Google ๊ฒ์ ํ (0) | 2021.06.14 |
DOM : innerHTML๊ณผ textContent์ ์ฐจ์ด (0) | 2021.06.02 |
ํฐ๋ฏธ๋ - ๋ฆฌ๋ ์ค ๊ถํ(Permission) (0) | 2021.05.21 |
CLI๋ช ๋ น์ด (0) | 2021.05.20 |