[Javascript] Javascript Data Types

@μ΅œν˜„μ›…(Harry) Β· April 07, 2024 Β· 23 min read

πŸ’­ λ³€μˆ˜

ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” κΈ°μ–΅ν•˜κ³  싢은 값을 λ©”λͺ¨λ¦¬μ— μ €μž₯ν•˜κ³ , μ €μž₯된 값을 읽어 λ“€μ—¬ μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ λ³€μˆ˜λΌλŠ” λ§€μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•œλ‹€.
λ³€μˆ˜λŠ”, ν•˜λ‚˜μ˜ 값을 μ €μž₯ν•˜κ³  μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ 곡간에 뢙인 상징적인 이름을 λ§ν•œλ‹€.

λ³€μˆ˜κ°€ ν•„μš”ν•œ 이유

λ³€μˆ˜λ₯Ό μ™œ μ‚¬μš©ν•΄μ•Ό ν• κΉŒ? λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜λŠ” μ΄μœ μ— λŒ€ν•΄μ„œ 곡감해보기 μœ„ν•΄ λ³€μˆ˜ 없이 ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 상황을 μƒκ°ν•΄λ³΄μž.

10 + 20

1

10 + 20 연산이 μ„±κ³΅μ μœΌλ‘œ 잘 μˆ˜ν–‰λ˜μ—ˆκ³ , μ—°μ‚° 결과도 λ©”λͺ¨λ¦¬μ— 잘 μ €μž₯λ˜μ—ˆμ§€λ§Œ ν•œ 가지 λ¬Έμ œκ°€ μžˆλ‹€. 30 μ΄λΌλŠ” 값이 어디에 μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— 30을 μž¬μ‚¬μš©ν•  수 μ—†λ‹€λŠ” 것이닀.

0x12f λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 직접 μ ‘κ·Όν•˜λ©΄, 30을 μž¬μ‚¬μš©ν•  수 μžˆκ² μ§€λ§Œ

  • μš΄μ˜μ²΄μ œκ°€ μ‚¬μš©μ€‘μΈ μ˜μ—­μ— μ ‘κ·Όν•΄μ„œ 값을 λ³€κ²½ν•  경우, 전체 μ‹œμŠ€ν…œμ— 치λͺ…적인 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚¬ ν™•λ₯ μ΄ 맀우 높아진닀.
  • λ©”λͺ¨λ¦¬ μ£Όμ†ŒλŠ” μ½”λ“œκ°€ 싀행될 λ•Œλ§ˆλ‹€ λ©”λͺ¨λ¦¬ 상황에 따라 μž„μ˜λ‘œ κ²°μ •λœλ‹€. μ½”λ“œκ°€ μ‹€ν–‰λ˜κΈ° μ΄μ „μ—λŠ” 값이 μ €μž₯된 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ•Œ 수 μ—†μœΌλ©°, μ•Œλ €μ£Όμ§€λ„ μ•ŠλŠ”λ‹€.

μœ„μ™€ 같은 μ΄μœ λ“€λ‘œ μΈν•΄μ„œ, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” κ°œλ°œμžκ°€ 직접 λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— μ ‘κ·Όν•  수 μžˆλŠ” 것을 ν—ˆμš©ν•˜κΈ° λ³΄λ‹€λŠ” β€œλ³€μˆ˜β€λΌλŠ” λ§€μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•œλ‹€. 상징적인 이름인 λ³€μˆ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 인터프리터에 μ˜ν•΄ 값이 μ €μž₯된 λ©”λͺ¨λ¦¬ μ£Όμ†Œλ‘œ μΉ˜ν™˜λ˜μ–΄ μ‹€ν–‰λœλ‹€.

λ³€μˆ˜ μ‚¬μš©ν•˜κΈ°

const result = 10 + 20

2

μœ„ μžλ°”μŠ€ν¬λ¦½νŠΈ μ½”λ“œμ—μ„œ, result λŠ” 30을 μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œ ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ 곡간을 μ‹λ³„ν•˜λŠ” 역할을 ν•œλ‹€.
result 처럼 λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 값을 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름을 λ³€μˆ˜ 이름(μ‹λ³„μž)라고 ν•˜λ©°, λ³€μˆ˜μ— μ €μž₯된 값을 λ³€μˆ˜ 값이라고 ν•œλ‹€.

μ‹λ³„μž

λ³€μˆ˜ 이름은 μ‹λ³„μžλΌκ³ λ„ ν•œλ‹€. μ‹λ³„μžλŠ” μ–΄λ–€ 값을 κ΅¬λ³„ν•΄μ„œ 식별할 수 μžˆλŠ” κ³ μœ ν•œ 이름을 λ§ν•œλ‹€. κ°’(μœ„ μ˜ˆμ‹œμ—μ„œλŠ” 30)은 λ©”λͺ¨λ¦¬ 곡간 상에 μ €μž₯λ˜μ–΄ 있고, μ‹λ³„μžλŠ” λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜μ–΄ μžˆλŠ” μ—¬λŸ¬ κ°’λ“€ 쀑 ν•œ 값을 κ΅¬λ³„ν•΄μ„œ 식별해낼 수 μžˆμ–΄μ•Ό ν•œλ‹€. 이λ₯Ό μœ„ν•΄μ„œ μ‹λ³„μžλŠ” μ–΄λ–€ 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•œλ‹€.

μœ„ μ˜ˆμ‹œμ—μ„œ result λŠ” κ°’ 30이 μ €μž₯λ˜μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†ŒμΈ 0x12fλ₯Ό κΈ°μ–΅ν•œλ‹€. μ‹λ³„μžλŠ” κ°’(30) μžμ²΄κ°€ μ•„λ‹ˆλΌ, 값이 λ©”λͺ¨λ¦¬ 곡간 상에 μ €μž₯λ˜μ–΄ μžˆλŠ” μ£Όμ†Œμ™€ 맀핑 관계λ₯Ό 가지며, 이 맀핑 관계 정보 λ˜ν•œ λ©”λͺ¨λ¦¬ 곡간 μ–΄λ”˜κ°€μ— μ €μž₯λœλ‹€.

3

κ°’μ˜ ν• λ‹Ή

var something // λ³€μˆ˜ μ„ μ–Έ
something = 30 // κ°’μ˜ ν• λ‹Ή
var something = 30 // λ³€μˆ˜ μ„ μ–Έ 및 κ°’μ˜ ν• λ‹Ή

값을 μ €μž₯ν•˜κ³  μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ λ³€μˆ˜(μ‹λ³„μž)λ₯Ό μ‚¬μš©ν•  λ•Œ, λ³€μˆ˜μ˜ 쑴재λ₯Ό μ½”λ“œλ₯Ό μ‹€ν–‰ν•  μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ•Œλ €μ•Ό ν•œλ‹€.
이 λ•Œ, λ³€μˆ˜ 선언을 ν†΅ν•΄μ„œ μ•Œλ¦¬κ²Œ 되며 μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” λŸ°νƒ€μž„ 이전에 λ¨Όμ € μ‹€ν–‰λœλ‹€.

반면, 값을 μ €μž₯ν•˜λŠ” 할당은 μ½”λ“œκ°€ 순차적으둜 μ‹€ν–‰λ˜λŠ” λŸ°νƒ€μž„μ— μ‹€ν–‰λœλ‹€. λ³€μˆ˜ μ„ μ–Έκ³Ό κ°’μ˜ 할당을 κ΅¬λΆ„ν•΄μ„œ ν•˜λ“ , ν•˜λ‚˜μ˜ 문으둜 단좕 ν‘œν˜„ν•΄μ„œ ν•˜λ“  선언은 λŸ°νƒ€μž„ 이전, κ°’ 할당은 λŸ°νƒ€μž„ 이후에 μ‹€ν–‰λœλ‹€.

4

μœ„ κ·Έλ¦Όμ—μ„œλ„ 확인할 수 μžˆλ“―, λ³€μˆ˜λ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 값을 μ €μž₯ν•˜κ³  μ‹λ³„μžκ°€ ν•΄λ‹Ή λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ²Œ λ˜λŠ” 과정을 λ³€μˆ˜ μ„ μ–Έ β†’ κ°’μ˜ ν• λ‹Ή 두 가지 κ³Όμ •μœΌλ‘œ λ‚˜λˆ„μ–΄μ„œ 생각해볼 수 μžˆλ‹€.

κ°’μ˜ μž¬ν• λ‹Ή

var something = 30 // λ³€μˆ˜ μ„ μ–Έ 및 κ°’μ˜ ν• λ‹Ή

something = 80

var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ήν•  수 μžˆλ‹€. μž¬ν• λ‹Ήμ€ ν˜„μž¬ λ³€μˆ˜μ— μ €μž₯된 값을 버리고, μƒˆλ‘œμš΄ 값을 μ €μž₯ν•˜λŠ” 것을 λ§ν•œλ‹€.
값을 μž¬ν• λ‹Ήν•  수 μ—†λ‹€λ©΄, λ³€μˆ˜κ°€ μ•„λ‹ˆλΌ μƒμˆ˜λΌκ³  ν•œλ‹€. μƒμˆ˜λŠ” μž¬ν• λ‹Ήμ΄ λΆˆκ°€λŠ₯ν•œ λ³€μˆ˜μ΄λ‹€.

5

something λ³€μˆ˜μ— κ°’ 80을 μž¬ν• λ‹Ή ν•˜λ©΄, λ©”λͺ¨λ¦¬ κ³΅κ°„μ—μ„œλŠ” μœ„ κ·Έλ¦Όκ³Ό 같이 μ‹λ³„μžκ°€ κ°€λ₯΄ν‚€λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œκ°€ λ³€κ²½λœλ‹€. 기쑴에 30이 μ €μž₯λ˜μ–΄ 있던 λ©”λͺ¨λ¦¬ 곡간을 λΉ„μš°κ³ , κ·Έ 곡간에 λ‹€μ‹œ 80을 ν• λ‹Ήν•˜λŠ” 것이 μ•„λ‹ˆλΌ, λ³€κ²½λœ κ°’ 80을 μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜κ³  μ‹λ³„μžκ°€ κ·Έ κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό κ°€λ₯΄ν‚€λ„둝 ν•œλ‹€. 이λ₯Ό ν†΅ν•΄μ„œ λΆˆλ³€μ„±μ΄ μœ μ§€λ  수 μžˆλ„λ‘ ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 데이터 νƒ€μž…κ³Ό ν•¨κ»˜ λΆˆλ³€μ„±μ— λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

πŸ’­ μžλ°”μŠ€ν¬λ¦½νŠΈ 데이터 νƒ€μž…

6

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ λͺ¨λ“  값은 데이터 νƒ€μž…μ„ 가지며, 데이터 νƒ€μž…μ„ 크게 μ›μ‹œ νƒ€μž…κ³Ό 객체 νƒ€μž…μœΌλ‘œ ꡬ뢄할 수 μžˆλ‹€.

μ›μ‹œ κ°’

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 데이터 νƒ€μž… 쀑 μ›μ‹œ νƒ€μž…μ˜ 값은 μœ„ μ΄λ―Έμ§€μ—μ„œλ„ 확인할 수 μžˆλ“―, Number, String, Boolean, undefined, null, Symbol이 μžˆλ‹€.

μ›μ‹œ νƒ€μž…μ˜ κ°’, 즉 μ›μ‹œκ°’μ˜ κ°€μž₯ μ€‘μš”ν•œ νŠΉμ§•μ€ λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’μ΄λΌλŠ” 것이닀. ν•œλ²ˆ μƒμ„±λœ μ›μ‹œκ°’μ€ 읽기 μ „μš© κ°’μœΌλ‘œμ¨ λ³€κ²½ν•  수 μ—†λ‹€.

var something = 10
something = 20

console.log(something) // 20

something λ³€μˆ˜μ— 숫자 10을 ν• λ‹Ήν–ˆλ‹€. 이 ν›„, 숫자 20을 ν• λ‹Ήν•˜κ³  μ½˜μ†”μ— 좜λ ₯해보면 20이 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆλ‹€. μˆ«μžλŠ” μ›μ‹œ νƒ€μž…μ˜ 값이며, λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값이라고 ν–ˆλŠ”λ° 변경이 된 κ²ƒμ²˜λŸΌ 보인닀. 무엇이 λ³€κ²½ λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” κ²ƒμΌκΉŒ?

변경이 λΆˆκ°€λŠ₯ν•œ κ°’μ΄λΌλŠ” κ°œλ…μ„ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œ, μš°μ„  λ³€μˆ˜μ™€ 값을 κ΅¬λΆ„ν•΄μ„œ 생각해야 ν•œλ‹€. λ³€μˆ˜λŠ” 값을 μ €μž₯ν•˜κΈ° μœ„ν•΄μ„œ ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ 곡간을 λ§ν•˜κ±°λ‚˜ λ©”λͺ¨λ¦¬ 곡간을 μ‹λ³„ν•˜κΈ° μœ„ν•΄μ„œ 뢙인 상징적인 이름이닀. 반면, 값은 λ³€μˆ˜μ— μ €μž₯된 데이터λ₯Ό λ§ν•œλ‹€.

7

β€œμ›μ‹œ 값은 변경이 λΆˆκ°€λŠ₯ν•˜λ‹€β€λΌλŠ” 말은, λ³€μˆ˜ 값을 λ³€κ²½ν•  수 μ—†λ‹€λŠ” 것이 μ•„λ‹ˆλΌ μ–΄λ–€ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜μ–΄ μžˆλŠ” μ›μ‹œ κ°’ 자체λ₯Ό λ³€κ²½ν•  수 μ—†λ‹€λŠ” 것을 λ§ν•œλ‹€. λ³€μˆ˜λŠ” μœ„ μ˜ˆμ‹œμ²˜λŸΌ μž¬ν• λ‹Ήμ„ ν†΅ν•΄μ„œ μ–Έμ œλ“  λ³€μˆ˜ 값을 λ³€κ²½ν•  수 μžˆλ‹€. μ›μ‹œ 값은 μ–΄λ–€ 일이 μžˆμ–΄λ„ 변경이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ—, λ°μ΄ν„°μ˜ 신뒰성을 보μž₯ν•œλ‹€.

8

λ§Œμ•½, μ›μ‹œ 값이 λ³€κ²½ κ°€λŠ₯ ν•˜λ‹€λ©΄ μœ„ 이미지와 같이 λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜μ–΄ μžˆλŠ” 값이 변경될 것이닀.

μ •λ¦¬ν•˜μžλ©΄, μ›μ‹œ 값은 변경이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 값을 직접 λ³€κ²½ν•  수 μ—†λ‹€. λ³€μˆ˜ κ°’ 변경을 μœ„ν•΄μ„œ 값을 μž¬ν• λ‹Ήν•˜λ©΄ μƒˆλ‘œμš΄ μ›μ‹œ 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ λ©”λͺ¨λ¦¬ 곡간을 μΆ”κ°€λ‘œ ν™•λ³΄ν•˜κ³  λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜λ˜ λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό λ³€κ²½ν•œλ‹€. μ΄λŸ¬ν•œ νŠΉμ§•μ„ λΆˆλ³€μ„±μ΄λΌκ³  ν•œλ‹€.

μ›μ‹œ 값을 ν• λ‹Ή 받은 λ³€μˆ˜κ°€ λ³€μˆ˜ 값을 λ³€κ²½ν•  수 μžˆλŠ” μœ μΌν•œ 방법은 μž¬ν• λ‹Ήμ΄λ‹€. λ³€μˆ˜ 값을 λ³€κ²½ν•  수 μžˆλŠ” 방법을 단 ν•œ κ°€μ§€λ‘œ λ‘” μ΄μœ λŠ”, λ³€μˆ˜ κ°’μ˜ 변경을 μΆ”μ ν•˜κΈ° μ‰½λ„λ‘ν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€.

값에 μ˜ν•œ 전달

var age = 26

var copiedAge = age

copiedAge = 20

console.log(copiedAge) // 20
console.log(age) // 26

age λ³€μˆ˜μ— μ›μ‹œ 값인 26을 ν• λ‹Ήν•˜κ³ , copiedAge μ—λŠ” age λ³€μˆ˜λ₯Ό ν• λ‹Ήν–ˆλ‹€. 이 ν›„, copiedAgeλ₯Ό 20으둜 λ³€κ²½ν•˜κ³  각 λ³€μˆ˜λ₯Ό μ½˜μ†”μ— 좜λ ₯ν•΄μ„œ 확인해보면 age λ³€μˆ˜λŠ” copiedAge λ³€μˆ˜ κ°’ μž¬ν• λ‹Ήμ— 영ν–₯을 받지 μ•Šκ³  κΈ°μ‘΄ 값인 26이 κ·ΈλŒ€λ‘œ 좜λ ₯λ˜λŠ” 것을 확인할 수 μžˆλ‹€.

var copiedAge = age

ν•΄λ‹Ή μ€„μ—μ„œ μ–΄λ–€ 일이 λ°œμƒν•˜λŠ”μ§€λ₯Ό νŒŒμ•…ν•΄λ³΄λ©΄, μ™œ copiedAge λ³€μˆ˜ κ°’ μž¬ν• λ‹Ήμ— 영ν–₯을 받지 μ•ŠλŠ”μ§€μ— λŒ€ν•΄μ„œ 이해할 수 μžˆλ‹€.
μš°μ„  age λ³€μˆ˜μ— μ›μ‹œ κ°’ 26이 ν• λ‹Ήλ˜μ—ˆμœΌλ―€λ‘œ, copiedAge 에도 λ™μΌν•˜κ²Œ 26이 할당될 것이닀. 이 λ•Œ, μƒˆλ‘œμš΄ κ°’ 26이 μƒμ„±λ˜μ–΄μ„œ copiedAge λ³€μˆ˜μ— ν• λ‹Ήλœλ‹€. λ³€μˆ˜μ— μ›μ‹œ 값을 κ°–λŠ” λ³€μˆ˜λ₯Ό ν• λ‹Ήν•˜λ©΄ μ›μ‹œ 값이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λ˜λŠ”λ°, 이λ₯Ό 값에 μ˜ν•œ 전달이라고 ν•œλ‹€. μƒˆλ‘œμš΄ κ°’ 26이 μƒμ„±λ˜λ©΄, 이 값을 μ €μž₯ν•˜κΈ° μœ„ν•œ μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간이 μΆ”κ°€μ μœΌλ‘œ ν•„μš”ν•˜κ²Œ 되고 ν•΄λ‹Ή κ³΅κ°„μ˜ μ£Όμ†ŒλŠ” κΈ°μ‘΄ age λ³€μˆ˜ κ°’ 26이 μ €μž₯λ˜μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œμ™€λŠ” λ³„κ°œμ˜ λ…λ¦½λœ μ£Όμ†Œμ΄λ‹€.

μ—„κ²©ν•˜κ²Œ λ§ν•˜λ©΄, λ³€μˆ˜μ—λŠ” 값이 μ „λ‹¬λ˜λŠ” 것이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ μ „λ‹¬λ˜λ©° λ³€μˆ˜μ™€ 같은 μ‹λ³„μžλŠ” 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•œλ‹€. copiedAge λ³€μˆ˜(μ‹λ³„μž)λŠ” μƒˆλ‘œμš΄ κ°’ 26이 μƒμ„±λ˜μ–΄ μ €μž₯된 λ©”λͺ¨λ¦¬ 곡간 μƒμ˜ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ²Œ λœλ‹€.

9

λ”°λΌμ„œ, copiedAge λ³€μˆ˜ 값을 20으둜 μž¬ν• λ‹Ήν•œλ‹€ ν•˜λ”λΌλ„ age λ³€μˆ˜λŠ” 영ν–₯을 받지 μ•Šκ²Œλ˜μ–΄ λ³€μˆ˜ 값이 λ³€κ²½λ˜μ§€ μ•ŠλŠ”λ‹€.

객체

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°μ²΄λŠ”

  • ν”„λ‘œνΌν‹°μ˜ κ°œμˆ˜κ°€ μ •ν•΄μ Έ μžˆμ§€ μ•Šμ•„, κ³„μ†ν•΄μ„œ ν”„λ‘œνΌν‹°λ₯Ό 생성할 수 μžˆλ‹€.
  • ν”„λ‘œνΌν‹°λŠ” λ™μ μœΌλ‘œ μΆ”κ°€, μ‚­μ œκ°€ κ°€λŠ₯ν•˜λ‹€.
  • ν”„λ‘œνΌν‹°κ°€ κ°€μ§€λŠ” 값에 μ œμ•½μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€. μ›μ‹œκ°’μ΄ 될 μˆ˜λ„, 객체 νƒ€μž…μ˜ 값이 될 μˆ˜λ„ μžˆλ‹€.

μœ„μ™€ 같은 νŠΉμ§•μ„ 가지며, μ›μ‹œ κ°’κ³ΌλŠ” 달리 확보해야할 λ©”λͺ¨λ¦¬ 크기λ₯Ό 사전에 μ •μ˜ν•  수 μ—†λ‹€.

μœ„μ™€ 같은 νŠΉμ§•μœΌλ‘œ μΈν•΄μ„œ, 객체λ₯Ό κ΄€λ¦¬ν•˜λŠ” 방식은 μ›μ‹œ 값을 κ΄€λ¦¬ν•˜λŠ” 방식에 λΉ„ν•΄μ„œ μƒλ‹Ήνžˆ λ³΅μž‘ν•˜κ³  λΉ„μš©μ΄ λ§Žμ΄λ“ λ‹€. 객체도 μ›μ‹œ κ°’ 처럼 λ³€κ²½(μž¬ν• λ‹Ή)이 μžˆμ„ λ•Œλ§ˆλ‹€ λ³΅μ‚¬ν•˜κ³  μƒˆλ‘­κ²Œ μƒμ„±ν•œλ‹€λ©΄ 신뒰성을 보μž₯ν•  μˆ˜λŠ” μžˆμ§€λ§Œ 객체의 크기가 맀우 클 수 있으며, ν”„λ‘œνΌν‹° 값이 또 λ‹€λ₯Έ 객체일 수 μžˆμ–΄ λ³΅μ‚¬μ˜ λΉ„μš©μ΄ μƒλ‹Ήνžˆ 많이 λ“ λ‹€. 즉, ν•œμ •λœ λ©”λͺ¨λ¦¬ 곡간을 효율적으둜 μ†ŒλΉ„ν•˜κΈ° νž˜λ“€κ³  μ„±λŠ₯이 λ‚˜λΉ μ§ˆ 수 μžˆλ‹€.

λ”°λΌμ„œ, λ©”λͺ¨λ¦¬λ₯Ό 보닀 효율적으둜 μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ 변경이 μžˆμ„ λ•Œλ§ˆλ‹€ λ³΅μ‚¬ν•œ 객체λ₯Ό μ €μž₯ν•  μƒˆλ‘œμš΄ λ©”λͺ¨λ¦¬ 곡간을 ν™•λ³΄ν•˜λŠ” 것이 μ•„λ‹Œ 객체λ₯Ό λ³€κ²½ κ°€λŠ₯ν•œ κ°’μœΌλ‘œ μ„€κ³„ν–ˆλ‹€.

ν•œμ •λœ λ©”λͺ¨λ¦¬λ₯Ό 효율적으둜 μ‚¬μš©ν•˜κΈ° >>> λ°μ΄ν„°μ˜ μ‹ λ’°μ„± μœ μ§€ν•˜κΈ° 둜 λ³Ό 수 μžˆλ‹€.

λ³€μˆ˜μ— 객체λ₯Ό ν• λ‹Ήν•˜λ©΄

var age = 26

μ›μ‹œ 값을 ν• λ‹Ήν•œ λ³€μˆ˜(μ‹λ³„μž)λŠ” λ©”λͺ¨λ¦¬ 곡간 μƒμ—μ„œ μ›μ‹œ κ°’(26)이 μ €μž₯된 μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ³  있으며, 이 μ£Όμ†Œλ₯Ό ν†΅ν•΄μ„œ μ›μ‹œ 값에 μ ‘κ·Όν•  수 μžˆλ‹€. 즉, μ›μ‹œ 값을 ν• λ‹Ήν•œ λ³€μˆ˜λŠ” μ›μ‹œ κ°’ 자체λ₯Ό κ°’μœΌλ‘œ κ°–λŠ”λ‹€.

var harry = {
  age: 26,
}

반면, 객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜κ°€ κΈ°μ–΅ν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간 μƒμ˜ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•˜λ©΄ μ €μž₯된 객체가 μ•„λ‹Œ 객체λ₯Ό κ°€λ₯΄ν‚€κ³  μžˆλŠ” μ°Έμ‘° 값에 μ ‘κ·Όν•  수 μžˆλ‹€. μ—¬κΈ°μ„œ, μ°Έμ‘° 값은 객체가 λ©”λͺ¨λ¦¬ 곡간 상에 μ €μž₯된 μ£Όμ†Œ κ·Έ μžμ²΄λ‹€.

10

μœ„ μ΄λ―Έμ§€μ²˜λŸΌ, 객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λ©΄ λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄ μžˆλŠ” μ°Έμ‘° κ°’(μ£Όμ†Œ)λ₯Ό 톡해 μ‹€μ œ 객체에 μ ‘κ·Όν•œλ‹€. μ›μ‹œ 값을 ν• λ‹Ήν•œ λ³€μˆ˜μ˜ 경우 β€œage λ³€μˆ˜λŠ” 26μ΄λΌλŠ” μˆ«μžν˜• 값을 κ°–λŠ”λ‹€.” λ˜λŠ” β€œage λ³€μˆ˜μ˜ 값은 26이닀.”라고 ν‘œν˜„ν•œλ‹€.

ν•˜μ§€λ§Œ, 객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜μ˜ 경우 β€œharry λ³€μˆ˜λŠ” 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλ‹€.” β€œharry λ³€μˆ˜λŠ” 객체λ₯Ό κ°€λ₯΄ν‚€κ³  μžˆλ‹€.”라고 ν‘œν˜„ν•œλ‹€. λ³€μˆ˜κ°€ κΈ°μ–΅ν•˜λŠ” λ©”λͺ¨λ¦¬ 곡간 μƒμ˜ μ£Όμ†Œμ— 무엇이 μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€μ— 따라 μ›μ‹œ 값인지 객체인지 ꡬ뢄할 수 μžˆλ‹€.

μ›μ‹œ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’μ΄λ―€λ‘œ μž¬ν• λ‹Ή 이외에 λ³€μˆ˜ 값을 λ³€κ²½ν•  μˆ˜λŠ” μ—†λ‹€. ν•˜μ§€λ§Œ, κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•˜λ©° μž¬ν• λ‹Ή ν•˜μ§€ μ•Šκ³ λ„ 객체λ₯Ό 직접 λ³€κ²½ν•  수 μžˆλ‹€. μž¬ν• λ‹Ή 없이 ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€/μ‚­μ œκ°€ κ°€λŠ₯ν•˜λ©°, ν”„λ‘œνΌν‹° 값을 κ°±μ‹ ν•  수 μžˆλ‹€. 객체가 λ³€κ²½ κ°€λŠ₯ν•˜λ‹€λŠ” 것은, λ©”λͺ¨λ¦¬μ— μ €μž₯된 객체λ₯Ό 직접 λ³€κ²½ν•  수 μžˆλ‹€λŠ” 것을 λ§ν•œλ‹€.

var harry = {
  age: 26,
}

harry.address = "busan"

11

harry 객체에 address ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•˜λ©΄, λ©”λͺ¨λ¦¬μ— μ €μž₯λ˜μ–΄ 있던 harry 객체λ₯Ό 직접 μˆ˜μ •ν•  수 μžˆλ‹€. 그리고 harry 객체λ₯Ό λ³€κ²½ν•  λ•Œ, μž¬ν• λ‹Ήν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ harry λ³€μˆ˜μ— μ €μž₯λ˜μ–΄ 있던 μ°Έμ‘° 값도 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.

μ •λ¦¬ν•˜μžλ©΄,

  • 객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λŠ” 객체가 μ €μž₯된 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•œλ‹€(κ°€λ₯΄ν‚¨λ‹€).
  • κ°μ²΄λŠ” μž¬ν• λ‹Ήμ„ ν•˜μ§€ μ•Šκ³ λ„, 값을 λ³€κ²½ν•  수 μžˆλ‹€. 즉, λ©”λͺ¨λ¦¬μ— μ €μž₯된 객체λ₯Ό 직접 μˆ˜μ •ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ, μœ„μ™€ 같은 νŠΉμ§•λ“€λ‘œ μΈν•΄μ„œ λΆ€μž‘μš©μ΄ 생길 μˆ˜λ„ μžˆλŠ”λ° λ°”λ‘œ μ›μ‹œ κ°’κ³ΌλŠ” λ‹€λ₯΄κ²Œ μ—¬λŸ¬ μ‹λ³„μžκ°€ ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•  수 μžˆλ‹€λŠ” 점이닀.

참쑰에 μ˜ν•œ 전달

var harry = {
  age: 26,
}

var copiedHarry = harry

객체λ₯Ό μ°Έμ‘°ν•˜κ³ (κ°€λ₯΄ν‚€κ³ ) μžˆλŠ” λ³€μˆ˜(harry)λ₯Ό λ‹€λ₯Έ λ³€μˆ˜(copiedHarry)에 ν• λ‹Ήν•˜λ©΄, 원본 객체의 μ°Έμ‘° 값이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λ˜λŠ”λ° 이λ₯Ό 참쑰에 μ˜ν•œ 전달이라고 ν•œλ‹€.

12

μœ„ 이미지와 같이, 원본 객체λ₯Ό κ°€λ₯΄ν‚€κ³  있던 μ°Έμ‘° κ°’(0x30f)κ°€ λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λœλ‹€. λ”°λΌμ„œ, 원본 harry와 사본 copiedHarry λͺ¨λ‘ λ™μΌν•œ 객체λ₯Ό κ°€λ₯΄ν‚€κ²Œ λœλ‹€. 이것이 μ—¬λŸ¬ μ‹λ³„μžκ°€ ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

var harry = {
  age: 26,
}

var copiedHarry = harry

copiedHarry.age = 20

console.log(harry.age) // 20

λ”°λΌμ„œ μ›λ³Έμ—μ„œλ“  μ‚¬λ³Έμ—μ„œλ“ , 객체의 ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€/μ‚­μ œ ν•˜κ±°λ‚˜ ν”„λ‘œνΌν‹° 값을 λ³€κ²½ν•˜λ©΄ μ„œλ‘œ 영ν–₯을 μ£Όκ³  λ°›λŠ”λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ β€œκ°’μ— μ˜ν•œ 전달”이든 β€œμ°Έμ‘°μ— μ˜ν•œ 전달”이든 κΈ°μ‘΄ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜μ–΄ 있던 값을 λ³΅μ‚¬ν•΄μ„œ μ „λ‹¬ν•œλ‹€λŠ” 것은 κ°™λ‹€. λ‹€λ§Œ, κΈ°μ‘΄ λ©”λͺ¨λ¦¬ 곡간에 μ›μ‹œ 값이 μ €μž₯λ˜μ–΄ μžˆμ—ˆλŠλƒ μ°Έμ‘° 값이 μ €μž₯λ˜μ–΄ μžˆμ—ˆλŠλƒμ˜ 차이만 μžˆμ„ 뿐이닀.

😎 ν€΄μ¦ˆ

const myAge = 26

const harryAge = 26

console.log(myAge === harryAge) // ?

const myHarry = {
  age: 26,
}

const yourHarry = {
  age: 26,
}

console.log(myHarry === yourHarry); // ? μœ„ μ½˜μ†”μ˜ 좜λ ₯ κ²°κ³Όλ₯Ό μ˜ˆμΈ‘ν•΄λ³΄μž.

console.log(myAge === harryAge)

13

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ === μ—°μ‚°μžλŠ” λ³€μˆ˜μ— μ €μž₯λ˜μ–΄ μžˆλŠ” 값을 νƒ€μž… λ³€ν™˜ν•˜μ§€ μ•Šκ³  λΉ„κ΅ν•œλ‹€. μ›μ‹œ 값을 ν• λ‹Ήν•œ λ³€μˆ˜λŠ” μ›μ‹œ κ°’ 자체λ₯Ό 가지고 있고 === μ—°μ‚°μžλ₯Ό ν†΅ν•΄μ„œ λΉ„κ΅ν•˜λ©΄, μ›μ‹œ 값을 λΉ„κ΅ν•œλ‹€. 두 λ³€μˆ˜μ— μ €μž₯된 26은 Number νƒ€μž…μ΄λ©°, 값도 κ°™κΈ° λ•Œλ¬Έμ— trueκ°€ 좜λ ₯λœλ‹€.

console.log(myHarry === yourHarry)

14

객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λŠ” μ°Έμ‘° 값을 가지고 있고 === μ—°μ‚°μžλ₯Ό ν†΅ν•΄μ„œ λΉ„κ΅ν•˜λ©΄, μ°Έμ‘° 값을 λΉ„κ΅ν•œλ‹€. 객체 λ¦¬ν„°λŸ΄({})λŠ” 평가될 λ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜κΈ° λ•Œλ¬Έμ— myHarry λ³€μˆ˜μ™€ yourHarry λ³€μˆ˜κ°€ κ°€λ₯΄ν‚€λŠ” κ°μ²΄λŠ” λͺ¨λ‘ ꡬ성은 κ°™μ§€λ§Œ λ‹€λ₯Έ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜λŠ” λ³„κ°œμ˜ 객체이닀. λ”°λΌμ„œ, 두 λ³€μˆ˜μ˜ μ°Έμ‘° 값도 λ‹€λ₯΄κ²Œ 되며 비ꡐ ν–ˆμ„ λ•Œ false κ°€ 좜λ ₯λœλ‹€

πŸ“š 정리

  • λ³€μˆ˜λŠ” 값을 μ €μž₯ν•˜κ³ , μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œ λ©”λͺ¨λ¦¬ 곡간 상에 뢙인 상징적인 이름이닀.
  • λ³€μˆ˜ 이름(μ‹λ³„μž)은 값이 μ €μž₯된 λ©”λͺ¨λ¦¬ 곡간 μƒμ˜ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•œλ‹€.
  • λ³€μˆ˜ 값은 μž¬ν• λ‹Ήμ„ ν†΅ν•΄μ„œ μ–Έμ œλ“  λ³€κ²½ν•  수 μžˆλ‹€.
  • μ›μ‹œ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•˜λ©°, μ΄λŠ” λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜μ–΄ μžˆλŠ” μ›μ‹œ κ°’ μžμ²΄κ°€ 변경이 λΆˆκ°€λŠ₯ν•˜λ‹€λŠ” μ˜λ―Έμ΄λ‹€.
  • κ°μ²΄λŠ” λ³€κ²½ κ°€λŠ₯ν•˜λ©°, μ΄λŠ” λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯λ˜μ–΄ μžˆλŠ” 객체λ₯Ό 직접 λ³€κ²½ν•  수 μžˆλ‹€λŠ” μ˜λ―Έμ΄λ‹€.
  • λ³€μˆ˜ 이름(μ‹λ³„μž)이 κ°€λ₯΄ν‚€λŠ” λ©”λͺ¨λ¦¬ 곡간에 μ›μ‹œ 값이 μ €μž₯λ˜μ–΄ μžˆμ—ˆλŠλƒ, μ°Έμ‘° 값이 μ €μž₯λ˜μ–΄ μžˆμ—ˆλŠλƒμ— λ”°λΌμ„œ β€œκ°’μ— μ˜ν•œ 전달”과 β€œμ°Έμ‘°μ— μ˜ν•œ 전달”을 ꡬ뢄할 수 μžˆλ‹€.
@μ΅œν˜„μ›…(Harry)
의미 μ—†λŠ” 기둝은 μ—†λ‹€κ³  μƒκ°ν•˜λ©°, ν•™μŠ΅ν•˜κ³  λŠλ‚€ 것듀을 κΈ°λ‘ν•©λ‹ˆλ‹€ :)