๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Javascript

๋ฐ์ดํ„ฐ ํƒ€์ž…(์›์‹œํ˜• vs ์ฐธ์กฐํ˜•)

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์›์‹œํ˜•๊ณผ ์ฐธ์กฐํ˜•์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋Š” ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ(์ •์  ํ• ๋‹น, ๋ณ€์ˆ˜, ์›์‹œํ˜• ๋ฐ์ดํ„ฐ ์ €์žฅ)์™€ ํž™ ๋ฉ”๋ชจ๋ฆฌ(๋™์  ํ• ๋‹น, ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ, ์ €์žฅ) ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์›์‹œํ˜•(Primitive Type)

๊ฐ์ฒด๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ํƒ€์ž…์€ ์›์‹œ ๊ฐ’(๋ถˆ๋ณ€ ๊ฐ’)์œผ๋กœ ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • boolen
  • null
  • undefined
  • number
  • string
  • symbol (ES6)

์•„๋ž˜์™€ ๊ฐ™์ด newName์— name์„ ํ• ๋‹นํ•˜๊ณ  ๋‹ค์‹œ "jennie"๋กœ ๊ฐ’์„ ์žฌํ• ๋‹น ํ•œ ํ›„ name๊ณผ newName์„ ํ™•์ธํ•ด ๋ณด๋ฉด ๋ฐ์ดํ„ฐ์˜ ๋ถˆ๋ณ€์„ฑ(newName์˜ ๊ฐ’์„ ์žฌํ• ๋‹น ํ•ด๋„ name์˜ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์Œ)์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let name = "sara";
let newName = name;
newName = "jennie";

console.log(name, newName); // sara, jennie

์ด๋ ‡๊ฒŒ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ์ด ๋‹น์—ฐํ•ด ๋ณด์ด์ง€๋งŒ ๊ทธ ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. ๋ฉ”๋ชจ๋ฆฌ(1002)์— ์‹๋ณ„์ž name์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

... 1002 ...
  ์ด๋ฆ„: name
๊ฐ’: 
 

2. "sara"๋ฅผ ๋น„์–ด์žˆ๋Š” ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ(5003) ๊ณต๊ฐ„์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

... 1002 ...
  ์ด๋ฆ„: name
๊ฐ’: 
 
... 5003 ..
  "sara"  

3. name๊ณผ newName ์€ ๊ฐ™์€ string ํƒ€์ž…์˜ "sara"๋ฅผ ์ €์žฅํ•œ ๋ฉ”๋ชจ๋ฆฌ(5003) ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

... 1002 1003
  ์ด๋ฆ„: name
๊ฐ’: @5003
์ด๋ฆ„: newName
๊ฐ’: @5003
... 5003 ..
  "sara"  

4. newName์— "jennie"๋ฅผ ์žฌํ• ๋‹น ํ•˜๋ฉด string ํƒ€์ž…์˜ "jennie"๋ฅผ ๋ฉ”๋ชจ๋ฆฌ(5004)์— ์ €์žฅํ•˜๊ณ  newName์€ ํ•ด๋‹น ์ฃผ์†Œ(5004)๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

... 1002 1003
  ์ด๋ฆ„: name
๊ฐ’: @5003
์ด๋ฆ„: newName
๊ฐ’: @5004
... 5003 5004
  "sara" "jennie"

์ด์™€ ๊ฐ™์ด ์›์‹œํ˜•์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๋ฅผ ์ง์ ‘ ๋ฐ”๊ฟ”๋†“๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฐธ์กฐํ˜•(Reference Type)

๊ฐ์ฒด ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ’์ด ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

  • Object
  • Array
  • Function
  • RegExp(์ •๊ทœ ํ‘œํ˜„์‹)
  • Set (ES6)
  • Map (ES6)

๊ฐ™์€ ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์–•์€ ๋ณต์‚ฌ(shallow copy)๋ฅผ ํ™•์ธํ•˜๋ฉด ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด obj2.b ๊ฐ’์„ ์žฌํ• ๋‹นํ–ˆ์„ ๋•Œ obj.b์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋œ ๊ฒฝ์šฐ๋ฅผ ์–•์€ ๋ณต์‚ฌ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

const obj = {
  a: 1,
  b: 2,
};

const obj2 = obj;

obj2.b = 3;

console.log(obj, obj2); // {a: 1, b: 3}, {a: 1, b: 3}

์ด๋ ‡๊ฒŒ obj์˜ ๊ฐ’์ด ๊ฐ™์ด ๋ณ€๊ฒฝ๋œ ์ด์œ ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. obj๋ฅผ ๋ฉ”๋ชจ๋ฆฌ(1002)์— ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

... 1002 1003
  ์ด๋ฆ„: obj
๊ฐ’: @5002
์ด๋ฆ„: obj2
๊ฐ’: @1002

2. ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ๊ณต๊ฐ„ ํ•˜๋‚˜์—๋Š” ๊ฐ’์ด ํ•˜๋‚˜์”ฉ๋ฐ–์— ๋ชป ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ(7103 ~) ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค.

5002  5003 5004 5005
@7103~ 1 2 3

ํ™•๋ณดํ•œ ๊ณต๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ(7103 ~)์— ํ”„๋กœํผํ‹ฐ(5003, 5004)๋ฅผ ํ•˜๋‚˜์”ฉ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

7103 7104 ...
์ด๋ฆ„: a
๊ฐ’: @5003
์ด๋ฆ„: b
๊ฐ’: @5004 -> @5005(3์œผ๋กœ ์žฌํ• ๋‹น)
 

3. obj2์— obj๋ฅผ ํ• ๋‹นํ–ˆ์œผ๋ฏ€๋กœ obj๋Š” 1002๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

4. obj2.b ์— 3์œผ๋กœ ์žฌํ• ๋‹น(5005) ํ•˜๋Š” ๊ฒฝ์šฐ obj์™€ obj2๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ(5002) ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค.

 

์ด์™€ ๊ฐ™์ด ์–•์€ ๋ณต์‚ฌ๋Š” obj2๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ๊ฒƒ์ด ์•„๋‹ˆ๋ผ obj์™€ ๊ฐ™์€ ์ฃผ์†Œ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ obj2.b๋ฅผ ๋ณ€๊ฒฝํ–ˆ์ง€๋งŒ obj๋„ ๊ฐ™์ด ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ฐธ๊ณ  - ์ฝ”์–ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ

'Javascript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Class ํด๋ž˜์Šค  (0) 2022.12.23
๊ฐ์ฒด ์ง€ํ–ฅ Prototype  (0) 2022.12.04
Javascript This  (0) 2022.11.21
์‹คํ–‰ ์ปจํ…์ŠคํŠธ  (0) 2022.11.13