πŸ“3μ£Όμ°¨ μœ„ν΄λ¦¬ 페이퍼 λ―Έμ…˜

pjw__98Β·2023λ…„ 11μ›” 5일
2
post-thumbnail
πŸ“Œ 3μ£Όμ°¨ μ»€λ¦¬ν˜λŸΌμ€ 개발의 꽃 이라고 λ³Ό 수 μžˆλŠ” JavaScript κΈ°μ΄ˆμ— λŒ€ν•΄ ν•™μŠ΅μ„ ν–ˆλ‹€.
 ν•™μŠ΅μ„ ν•˜λ©΄μ„œ λŠλ‚€μ μ€  정말 많이 곡뢀해야겠닀 λΌλŠ”κ±Έ λŠκΌˆλ‹€..
 μ½”λ“œ ν•˜λ‚˜ν•˜λ‚˜κ°€ μ€‘μš”ν•˜λ‹€λŠ”κ²ƒλ„ λŠκΌˆλ‹€ ,  μ‰½κ²Œ μƒκ°ν•΄μ„œλŠ” μ•ˆλ˜λŠ” μ–Έμ–΄κ°€ λ°”λ‘œ JS 인 것 κ°™λ‹€.
 정말 맀λ ₯적인 μ–Έμ–΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ == 와 === κ°€ μ–΄λ–»κ²Œ λ‹€λ₯Έμ§€ μ„€λͺ…ν•΄ μ£Όμ„Έμš”.

πŸ€”λ™λ“± 비ꡐ 관계 μ—°μ‚°μžλž€?

JSμ—μ„œ == 와 === 같은 μ—°μ‚°μžλ₯Ό
"동등 비ꡐ 관계 μ—°μ‚°μž (Equality operators)"
λΌκ³ ν•œλ‹€.

μ§ˆλ¬Έμ—μ„œ == λŠ” κ°’λ§Œ 같을 λ•Œ 즉 , 좜λ ₯λ˜λŠ” κ°’λ§Œ 같을 λ•Œ 비ꡐλ₯Όν•΄μ€€λ‹€.

πŸ“Œ // == κ°’λ§Œ 같을 λ•Œ

console.log(2 == 2); //true
console.log(2 == 3); //false
console.log(2 == '2'); //true 
console.log(false == 0); //true
console.log(true == 1); // true 

console.log(2 == '2'); //true
μ—¬κΈ°μ„œ 차이점이 λ°œμƒν•œλ‹€ .
2와 '2'λŠ” Number와 string μ΄μ§€λ§Œ 좜λ ₯λ˜λŠ” 값이 같기에 trueκ°€ 좜λ ₯λœλ‹€.

πŸ“Œ // === κ°’κ³Ό νƒ€μž…μ΄ λ‘˜λ‹€ 같을 λ•Œ

console.log(true === 1); //true
console.log(false === 0); // false
console.log(2 === '2');  /// false

console.log(2 === '2'); /// false

==와 달리 === μ—°μ‚°μžλŠ” νƒ€μž…κΉŒμ§€ μ‹λ³„ν•΄μ„œ 두 값을 비ꡐ해쀀닀.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ 얕은 볡사(Shallow Copy)와 κΉŠμ€ 볡사(Deep Copy)에 λŒ€ν•΄ μ„€λͺ…ν•΄ μ£Όμ„Έμš”.

πŸ€” 객체 볡사 방법은 무엇이 μžˆμ„κΉŒ?

객체 볡사 방법을 μ•ŒκΈ° 전에 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 데이터 νƒ€μž…μ„ λ¨Όμ € 짚고 λ„˜μ–΄κ°€μ•Ό

객체 볡사 방법을 μ΄ν•΄ν•˜κΈ° μˆ˜μ›”ν• κ²ƒμ΄λ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 데이터 νƒ€μž…μ—λŠ” 두가지 데이터 νƒ€μž…μœΌλ‘œ λ‚˜λ‰œλ‹€.

πŸ“Œ μ›μ‹œ νƒ€μž…(Primitives)

  • Boolean, Null, Undefined, Number, BigInt, String, Symbol 이 μžˆλ‹€.

  • μ›μ‹œ νƒ€μž…μ˜ λ³€μˆ˜λ“€μ€ 데이터 볡사가 일어날 λ•Œ λ©”λͺ¨λ¦¬ 곡간을 μƒˆλ‘œ ν™•λ³΄ν•˜μ—¬

    독립적인 값을 μ €μž₯ν•œλ‹€.

  • μ›μ‹œ νƒ€μž…μ€ λΆˆλ³€ 데이터(Immutable Data)μ΄λ―€λ‘œ ν•œλ²ˆ μƒμ„±λ˜λ©΄ Read Only 속성을 가지며, λ³€κ²½ 될 수 μ—†λ‹€.

  • μ›μ‹œνƒ€μž…μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ κ°’λ“€(ν•¨μˆ˜, λ°°μ—΄, μ •κ·œν‘œν˜„μ‹ λ“±)은 λͺ¨λ‘ 객체이닀.

πŸ“Œ κ°μ²΄νƒ€μž…(object/reference type)

  • κ°μ²΄λŠ” 데이터와 κ·Έ 데이터 κ΄€λ ¨ν•œ λ™μž‘μ„ λͺ¨λ‘ ν¬ν•¨ν•˜λŠ” κ°œλ…μ  μ‘΄μž¬μ΄λ‹€.

  • λ‹€μ–‘ν•œ 데이터λ₯Ό 담을 수 μžˆμŠ΅λ‹ˆλ‹€.
    β†’ ν‚€λ‘œ κ΅¬λΆ„λœ 데이터 μ§‘ν•©μ΄λ‚˜ 개체(entity)λ₯Ό μ €μž₯ν•  수 μžˆλ‹€.

-객체 νƒ€μž…μ€ λ³€κ²½ κ°€λŠ₯ν•œ κ°’(mutable value)이닀.

얕은볡사(Shallow Copy)

  • 얕은 λ³΅μ‚¬λŠ” 주둜 객체와 배열을 λ‹€λ£° λ•Œ μ‚¬μš©λœλ‹€.
  • λ‚΄λΆ€μ˜ μš”μ†Œ(객체 λ˜λŠ” λ°°μ—΄)λŠ” λ³΅μ‚¬λ˜μ§€ μ•Šκ³  원본을 κ³΅μœ ν•œλ‹€ 이둜 인해
    볡사본을 μˆ˜μ •ν•  λ•Œ 원본에도 영ν–₯을 λ―ΈμΉ  수 μžˆλ‹€.

κΉŠμ€ 볡사(Deep Copy)

  • κΉŠμ€ λ³΅μ‚¬λŠ” λͺ¨λ“  μ€‘μ²©λœ 객체와 λ°°μ—΄μ˜ 일뢀λ₯Ό λ°˜λ³΅ν•˜λ©΄μ„œ λ³΅μ‚¬ν•˜μ—¬ μƒˆλ‘œμš΄ 볡사본을 λ§Œλ“ λ‹€.
  • κΉŠμ€ 볡사λ₯Ό μ‚¬μš©ν•˜λ©΄ 볡사본은 μ™„μ „νžˆ 독립적인 데이터 ꡬ쑰가 λœλ‹€.
    이둜 인해 μˆ˜μ •ν•  λ•Œ 원본에 영ν–₯이 λ―ΈμΉ˜μ§€ μ•Šκ³  λ³΅μ‚¬λ³Έμ—λ§Œ 영ν–₯을 λ―ΈμΉœλ‹€.

얕은 볡사와 κΉŠμ€ λ³΅μ‚¬λŠ” 데이터λ₯Ό λ‹€λ£° λ•Œ μ€‘μš”ν•œ κ°œλ…μ΄λ©°, 데이터 ꡬ쑰와 상황에 따라 μ μ ˆν•œ 방법을 μ„ νƒν•΄μ•Όν•œλ‹€.

πŸ‘πŸ» Reference


μ›μ‹œνƒ€μž…κ³Ό κ°μ²΄νƒ€μž…

κΉŠμ€λ³΅μ‚¬μ™€ 얕은볡사

profile
β˜„οΈ

0개의 λŒ“κΈ€