๐Ÿ“– primitive type๊ณผ object type

๊ธฐ๋ก์ผ๊ธฐ๐Ÿ“ซยท2020๋…„ 12์›” 6์ผ
1

Javascript ๊ฐœ๋…์ •๋ฆฌ

๋ชฉ๋ก ๋ณด๊ธฐ
2/15

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ 7๊ฐ€์ง€ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์ž! ๐Ÿ˜Š๐Ÿ˜Š

์›์‹œ๊ฐ’ vs ๊ฐ์ฒด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” 7๊ฐ€์ง€์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ œ๊ณตํ•˜๊ณ  ์ด๋Š” ํฌ๊ฒŒ primitive(์›์‹œ) type๊ณผ object(๊ฐ์ฒด) type ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. ์›์‹œ ํƒ€์ž…๊ณผ ๊ฐ์ฒด์˜ ์ฃผ๋œ ์ฐจ์ด๋Š” mutability์ด๋‹ค.

๐Ÿ’ก ์›์‹œ ํƒ€์ž…์€ ํ•œ๋ฒˆ ์„ ์–ธ๋˜๋ฉด ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ๊ฐ์ฒด ํƒ€์ž…์€ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


Primitive type

primitive type(์›์‹œ ํƒ€์ž…)์˜ ํŠน์ง•์„ ์•Œ์•„๋ณด์ž.

  • number, string, boolean, undefined, null, symbol type
  • ํ• ๋‹น ์‹œ ๋ณ€์ˆ˜์—๋Š” ์‹ค์ œ ๊ฐ’(value)์ด ์ €์žฅ๋œ๋‹ค.
  • ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹น ์‹œ '๊ฐ’'์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค. (pass by value)
  • ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ’์ด๋‹ค. ์ˆ˜์ •์„ ํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ฃผ์†Œ์— ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.

let str1 = 'hello';
str1 = 'world';

์•ž์„œ ์–ธ๊ธ‰ ํ–ˆ๋“ฏ์ด objectํƒ€์ž…๊ณผ primitive type์„ ๋‚˜๋ˆ„๋Š” ์ฃผ๋œ ๊ธฐ์ค€์€ ์ˆ˜์ • ๊ฐ€๋Šฅ ์—ฌ๋ถ€์ด๋‹ค.

์œ„์˜ ์ฝ”๋“œ์™€ ๊ฐ™์ด ๊ธฐ์กด์˜ str1๊ฐ’ ๋ณ€๊ฒฝ ์‹œ ๊ธฐ์กด์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ์ ‘๊ทผํ•ด ํ•ด๋‹น value๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— 'world'๋ผ๋Š” ๋ฌธ์ž์—ด์„ ํ• ๋‹นํ•˜๊ณ  str1์— ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•˜๊ฒŒ ๋œ๋‹ค.


let str2 = 'original string';
str2[2] = 'B';
console.log(str2); // original string ์ถœ๋ ฅ

primitive type ํ˜•์‹์˜ ๋ณ€์ˆ˜ ๊ฐ’ ๋ณ€๊ฒฝ ์‹œ๋„ ์‹œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€๋Š” ์•Š์ง€๋งŒ, ์ˆ˜์ • ์‚ฌํ•ญ์ด ๋ฐ˜์˜๋˜์ง€ ์•Š๋Š”๋‹ค.


Object type

  • ๊ฐ์ฒด, ํ•จ์ˆ˜ ๋ฐฐ์—ด ๋“ฑ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ฑฐ์˜ ๋ชจ๋“ ๊ฒƒ์ด ๊ฐ์ฒด์ด๋‹ค.
  • ํ• ๋‹น ์‹œ ๋ณ€์ˆ˜์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(์ฐธ์กฐ๊ฐ’)์ด ์ €์žฅ๋œ๋‹ค.
  • ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ํ• ๋‹น ์‹œ '์ฐธ์กฐ'๊ฐ’์ด ํ• ๋‹น๋˜์–ด ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋œ๋‹ค.
  • ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— property๋ฅผ ๋™์ ์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋„, ์‚ญ์ œํ•˜๋Š”๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ฐ์ฒด๋Š” ๋Œ€์ž…์—ฐ์‚ฐ์ด ์ง„ํ–‰๋์„์‹œ์— ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐ™์€ ์ฃผ์†Œ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

person = {
  name: 'Lee'
};

let copy = person;

copy.name = 'Kim';
console.log(person.name); // 'Kim' ์ถœ๋ ฅ

person๊ณผ copy ๊ฐ์ฒด๋Š” ๊ฐ™์€ ์ฃผ์†Œ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๊ฐ์ฒด์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ์ด ๋œ๋‹ค.

์ •๋ฆฌ

primitive type(์›์‹œ ํƒ€์ž…)๊ณผ object type(๊ฐ์ฒด ํƒ€์ž…)์— ์ฃผ๋œ ์ฐจ์ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ํ‚ค์›Œ๋“œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด์ž!

์›์‹œ๊ฐ’๊ณผ ๊ฐ์ฒด๊ฐ’์˜ ์ฃผ๋œ ์ฐจ์ด 3๊ฐ€์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์›์‹œ ๊ฐ’์€ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ , ๊ฐ์ฒด ๊ฐ’์€ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•จ
  • ์›์‹œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋ฉด ์‹ค์ œ ๊ฐ’์ด ์ €์žฅ๋˜๊ณ , ๊ฐ์ฒด๋Š” ์ฃผ์†Œ๊ฐ’์ด ์ €์žฅ๋จ
  • ์›์‹œ ๊ฐ’์„ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜๋ฉด ์‹ค์ œ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ €์žฅ๋˜๊ณ , ๊ฐ์ฒด๋Š” ์ฃผ์†Œ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ €์žฅ๋จ

0๊ฐœ์˜ ๋Œ“๊ธ€