λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

JavaScript

[ Javascript ] μ›μ‹œ κ°’κ³Ό 객체의 차이에 λŒ€ν•΄ μ•Œμ•„λ³΄κΈ°.

 

 

μ›μ‹œ κ°’ (Primitive)

 

 

MDN - μ›μ‹œ κ°’ μ„€λͺ…

 

μ›μ‹œ κ°’ - μš©μ–΄ 사전 | MDN

JavaScriptμ—μ„œ μ›μ‹œ κ°’(primitive, λ˜λŠ” μ›μ‹œ μžλ£Œν˜•)μ΄λž€ 객체가 μ•„λ‹ˆλ©΄μ„œ λ©”μ„œλ“œλ„ 가지지 μ•ŠλŠ” λ°μ΄ν„°μž…λ‹ˆλ‹€. μ›μ‹œ κ°’μ—λŠ” 7μ’…λ₯˜, string, number (en-US), bigint (en-US), boolean, undefined, symbol, 그리고 null이

developer.mozilla.org

 

 

 

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ›μ‹œ 값은 객체가 μ•„λ‹ˆκ³ , λ©”μ„œλ“œλ₯Ό 가지지 μ•ŠλŠ” λ°μ΄ν„°λ‘œ μ•„λž˜μ™€ 같이 총 7κ°€μ§€μ˜ μ’…λ₯˜κ°€ μ‘΄μž¬ν•œλ‹€.

 

- string

- number

- bigint

- boolean

- undefined

- symbol

- null

 

 

 

μ›μ‹œ νƒ€μž…μ˜ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’μœΌλ‘œ, λ³€μˆ˜μ— μ›μ‹œ 값을 μž¬ν• λ‹Ή(ꡐ체)은 κ°€λŠ₯ν•˜μ§€λ§Œ μ›μ‹œ 값을 직접 λ³€ν˜•ν•  μˆ˜λŠ” μ—†λ‹€.

κ·Έλ ‡κΈ°λ•Œλ¬Έμ— μ›μ‹œ 값은 λ°μ΄ν„°μ˜ 신뒰성을 보μž₯ν•œλ‹€.

* μ—¬κΈ°μ„œ λ³€μˆ˜μ™€ 값을 ν˜Όλ™ν•˜λ©΄ μ•ˆλ¨! λ³€κ²½ν•  수 μ—†λŠ” 것은 λ³€μˆ˜κ°€ μ•„λ‹ˆλΌ (μ›μ‹œ)값이닀! λ³€μˆ˜μ˜ 값은 μž¬ν• λ‹Ήμ„ 톡해 λ³€κ²½(ꡐ체)ν•  수 μžˆλ‹€.

 

 

 

 

var number = 3; // number λ³€μˆ˜μ— μ›μ‹œ κ°’ 3을 ν• λ‹Ή.
number = 5; // number λ³€μˆ˜μ— μ›μ‹œ κ°’ 5λ₯Ό μž¬ν• λ‹Ή. 
// 이 λ•Œ 기쑴의 κ°’ 3은 λ©”λͺ¨λ¦¬ μ–΄λ”˜κ°€μ— λ‚¨μ•„μžˆκ³ , μƒˆλ‘œμš΄ μ›μ‹œ 값인 5둜 λ³€μˆ˜ number의 값이 ꡐ체 λœλ‹€.

 

μ›μ‹œ 값을 가진 λ³€μˆ˜μ— μž¬ν• λ‹Ήμ„ 해도 μ›μ‹œ 값이 λ°”λ€ŒλŠ”κ²Œ μ•„λ‹ˆλΌ 기쑴의 μ›μ‹œ 값은 λ©”λͺ¨λ¦¬μ— λ‚¨μ•„μžˆκ³ , μƒˆλ‘­κ²Œ ν• λ‹Ήλœ μ›μ‹œ νƒ€μž…μ˜ κ°’μœΌλ‘œ μž¬ν• λ‹Ή 되고 λ³€μˆ˜μ— ν• λ‹Ήλœ κΈ°μ‘΄ 값을 κ°€λ¦¬ν‚€λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ μ•„λ‹Œ μƒˆλ‘­κ²Œ ν• λ‹Ήλœ 값을 κ°€λ¦¬ν‚€λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ‘œ λ³€κ²½λœλ‹€. (μ΄λ•Œ λ©”λͺ¨λ¦¬μ— λ‚¨μ•„μžˆλŠ” 기쑴의 μ›μ‹œ 값은 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ κ°€λΉ„μ§€μ»¬λ ‰μ…˜μ— μ˜ν•΄ μ‹œκΈ°λŠ” μ •ν™•νžˆ μ•Œ 수 μ—†μ§€λ§Œ, μΆ”ν›„ μ •λ¦¬λœλ‹€.)

λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜λ˜ λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œκ°€ λ³€κ²½λœ μ΄μœ λŠ” λ³€μˆ˜μ— ν• λ‹Ήλœ μ›μ‹œ 값이 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값이기 λ•Œλ¬Έμ΄λ‹€.

 

 

 

 

 

λ³€μˆ˜μ— μ›μ‹œ 값을 ν• λ‹Ήν•  경우, λ³€μˆ˜μ—λŠ” μ›μ‹œ 값이 μ €μž₯된 λ©”λͺ¨λ¦¬μ˜ μ£Όμ†Œκ°€ μ €μž₯λœλ‹€.  λ©”λͺ¨λ¦¬μ— 값이 직접 μ €μž₯λœλ‹€.

 

var origin = 'μ˜€λ¦¬μ§€λ„'; // λ³€μˆ˜ origin에 μ›μ‹œ κ°’(λ¬Έμžμ—΄) 'μ˜€λ¦¬μ§€λ„' ν• λ‹Ή.
var copy = origin; // λ³€μˆ˜ copy에 λ³€μˆ˜ origin 의 값이 λ³΅μ‚¬λ˜μ–΄ ν• λ‹Ή.

origin = 'μ˜€λ¦¬μ§€λ„μ΄μ•Ό.'; // λ³€μˆ˜ origin에 μƒˆλ‘œμš΄ μ›μ‹œ κ°’(λ¬Έμžμ—΄) 'μ˜€λ¦¬μ§€λ„μ΄μ•Ό.' λ₯Ό μž¬ν• λ‹Ή.

console.log(origin); // 'μ˜€λ¦¬μ§€λ„μ΄μ•Ό.'
console.log(copy); // 'μ˜€λ¦¬μ§€λ„'

 

μ›μ‹œ 값을 가진 λ³€μˆ˜(origin)λ₯Ό λ‹€λ₯Έ λ³€μˆ˜(copy)에 ν• λ‹Ήν•˜μ—¬ origin λ³€μˆ˜κ°€ κ°–λŠ” μ›μ‹œ 값인 'μ˜€λ¦¬μ§€λ„'이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λœλ‹€.

이런 경우λ₯Ό 값에 μ˜ν•œ 전달이라고 ν•œλ‹€. copyλ³€μˆ˜μ—λŠ” origin의 μ›μ‹œ κ°’ 'μ˜€λ¦¬μ§€λ„'이 λ³΅μ‚¬λ˜μ–΄ origin λ³€μˆ˜μ— μƒˆλ‘œμš΄ 값을 μž¬ν• λ‹Ή ν•˜λ”λΌλ„ copy λ³€μˆ˜μ— μ €μž₯된 μ›μ‹œ κ°’ 'μ˜€λ¦¬μ§€λ„'은 λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

객체 (Object)

 

 

MDN - 객체 μ„€λͺ…

 

JavaScript 객체 κΈ°λ³Έ - Web 개발 ν•™μŠ΅ν•˜κΈ° | MDN

이 κΈ€μ—μ„œλŠ” JavaScript 객체와 κ΄€λ ¨λœ 기본적인 문법을 μ‚΄νŽ΄λ³΄κ³  이전 μ½”μŠ€μ—μ„œ ν•™μŠ΅ν•΄μ„œ 이미 μ•Œκ³  μžˆλŠ” JavaScript 의 νŠΉμ§•λ“€κ³Ό μš°λ¦¬κ°€ 이미 μ‚¬μš©ν•˜κ³  μžˆλŠ” κΈ°λŠ₯듀이 이미 객체와 κ΄€λ ¨λ˜μ–΄ μžˆλ‹€λŠ”

developer.mozilla.org

 

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°μ²΄λŠ” μ›μ‹œ 값을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ κ°’(ν•¨μˆ˜, λ°°μ—΄, μ •κ·œν‘œν˜„μ‹ λ“±)은 λͺ¨λ‘ 객체이닀.

κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•œ κ°’μœΌλ‘œ, μ‹λ³„μžμΈ λ³€μˆ˜μ— ν• λ‹Ήν•  λ•Œ μ°Έμ‘° 값을 λ°›μ•„μ„œ μ‹€μ œ 객체에 μ ‘κ·Όν•œλ‹€. (μ›μ‹œ 값은 μ°Έμ‘° 값이 μ•„λ‹Œ 값을 λ°›μŒ.) λ˜ν•œ μ›μ‹œ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•˜μ§€λ§Œ κ°μ²΄λŠ” λ™μ μœΌλ‘œ 값을 μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œκ°€ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 값을 λ³€κ²½ν•  λ•Œ 기쑴의 λ©”λͺ¨λ¦¬ μ£Όμ†Œ κ·ΈλŒ€λ‘œ μ‚¬μš©ν•œλ‹€. 

 

 

 

const objA = { name : 'Lee' };

 

 μœ„와 같이 객체λ₯Ό objA λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ objA에 μ €μž₯된 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•˜λ©΄ μ°Έμ‘° 값에 μ ‘κ·Όν•  수있고 이 μ°Έμ‘° 값을 톡해 μ‹€μ œ 객체에 μ ‘κ·Όν•œλ‹€. 

 

 

 

 

 

const objA = { name : 'Lee' };
const objB = objA; 

console.log(objB); // { name : 'Lee'};

console.log(objA === objB); // true

objB.name = 'Kim';

console.log(objA); // { name : 'Kim'}

 

objBλŠ” objAκ°€ μ‹€μ œ 객체에 μ ‘κ·Όν•  λ•Œ ν•„μš”ν•œ μ°Έμ‘° 값이 볡사 λ˜μ—ˆλ‹€. objB와 objA의 λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” λ‹€λ₯΄μ§€λ§Œ λ™μΌν•œ μ°Έμ‘° 값을 κ°–κΈ° λ•Œλ¬Έμ— 두 개의 μ‹λ³„μžκ°€ ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•˜κ³  μžˆλ‹€.

 

 

 

 

 

 

 

 

 

 

 

 

μ›μ‹œ κ°’κ³Ό 객체의 차이점 간단 비ꡐ

 

μ›μ‹œ κ°’ 객체
λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’(immutable value)이닀. λ³€κ²½ κ°€λŠ₯ν•œ κ°’(mutable value)이닀.
λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ λ³€μˆ˜μ—λŠ” μ‹€μ œ 값이 μ €μž₯λœλ‹€. λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ λ³€μˆ˜μ—λŠ” μ°Έμ‘° 값이 μ €μž₯λœλ‹€.
λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ μ›μ‹œ 값이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λœλ‹€.
πŸ‘‰ 값에 μ˜ν•œ 전달
λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ μ›λ³Έμ˜ μ°Έμ‘° 값이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λœλ‹€.
πŸ‘‰ 참쑰에 μ˜ν•œ 전달

 

 

 

 

 

 

 

 

 

좜처

- MDN

λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive - 이웅λͺ¨(μœ„ν‚€λΆμŠ€)