front-end/JavaScript

[JavaScript] 8. μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ

gaan 2023. 4. 3. 18:38

πŸ“– λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ ꡐ재) 11μž₯. μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ

 

μžλ°”μŠ€ν¬λ¦½νŠΈκ°€ μ œκ³΅ν•˜λŠ” 7κ°€μ§€ 데이터 νƒ€μž…(숫자, λ¬Έμžμ—΄, λΆˆλ¦¬μ–Έ, null, undefinedm μ‹¬λ²Œ, 객체 νƒ€μž…)은 μ›μ‹œ νƒ€μž…κ³Ό 객체 νƒ€μž…μœΌλ‘œ ꡬ뢄할 수 μžˆλ‹€.

  • μ›μ‹œ νƒ€μž…μ˜ κ°’
    • λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’
    • μ›μ‹œ 값을 λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ λ³€μˆ˜(ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간)μ—λŠ” μ‹€μ œ κ°’ μ €μž₯
    • 값에 μ˜ν•œ 전달 : λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ μ›λ³Έμ˜ μ›μ‹œ κ°’ λ³΅μ‚¬λ˜μ–΄ 전달
  • 객체(μ°Έμ‘°) νƒ€μž…μ˜ κ°’
    • λ³€κ²½ κ°€λŠ₯ν•œ κ°’
    • 객체λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ λ³€μˆ˜(ν™•λ³΄λœ λ©”λͺ¨λ¦¬ 곡간)μ—λŠ” μ°Έμ‘° κ°’ μ €μž₯
    • 참쑰에 μ˜ν•œ 전달 : λ‹€λ₯Έ λ³€μˆ˜μ— ν• λ‹Ήν•˜λ©΄ μ›λ³Έμ˜ μ°Έμ‘° 값이 λ³΅μ‚¬λ˜μ–΄ 전달

 


01. μ›μ‹œ κ°’

1) λ³€κ²½ λΆˆκ°€λŠ₯ν•œ κ°’

μ›μ‹œ νƒ€μž…μ˜ 값은 λ³€κ²½ λΆˆκ°€λŠ₯ν•œ 값이닀. 
ν•œλ²ˆ μƒμ„±λœ μ›μ‹œ 값은 읽기 μ „μš© κ°’μœΌλ‘œμ„œ λ³€κ²½ν•  수 μ—†λ‹€.

 

2) λ¬Έμžμ—΄κ³Ό λΆˆλ³€μ„±

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ¬Έμžμ—΄μ€ μ›μ‹œ νƒ€μž…μ΄λ©°, λ³€κ²½ λΆˆκ°€λŠ₯ν•˜λ‹€.

 

이것은 λ¬Έμžμ—΄μ΄ μƒμ„±λœ ν›„ λ³€κ²½λœ 것인지, μ½”λ“œλ₯Ό 톡해 μ•Œμ•„λ³΄μž.

 

πŸ–₯️ 예제 μ½”λ“œ

var str = 'Hello';
str = 'world';

첫 번째 λ¬Έ -> λ¬Έμžμ—΄ 'Hello' 생성, μ‹λ³„μž str은 λ¬Έμžμ—΄ 'Hello'κ°€ μ €μž₯된 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ 첫 번째 λ©”λͺ¨λ¦¬ μ…€ μ£Όμ†Œλ₯Ό 가리킴.

두 번째 λ¬Έ -> μƒˆλ‘œμš΄ λ¬Έμžμ—΄ 'world'λ₯Ό λ©”λͺ¨λ¦¬μ— 생성, μ‹λ³„μž str은 이것을 가리킴.

 

μ΄λ•Œ λ¬Έμžμ—΄ 'Hello'와 'world'λŠ” λͺ¨λ‘ λ©”λͺ¨λ¦¬μ— μ‘΄μž¬ν•œλ‹€.

μ‹λ³„μž str은 λ¬Έμžμ—΄ 'Hello'λ₯Ό 가리킀고 μžˆλ‹€κ°€ λ¬Έμžμ—΄ 'world'λ₯Ό 가리킀도둝 λ³€κ²½λ˜μ—ˆμ„ 뿐인 것이닀.

 

 

3) 값에 μ˜ν•œ 전달

"값에 μ˜ν•œ 전달" μ΄λΌκ³ λŠ” ν•˜μ§€λ§Œ, 값을 μ „λ‹¬ν•˜λŠ” 것이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό μ „λ‹¬ν•œλ‹€.
단, μ „λ‹¬λœ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•˜λ©΄ 값을 μ°Έμ‘°ν•  수 μžˆλ‹€.

 

 

πŸ–₯️ 예제 μ½”λ“œ

var score = 80;
var copy = score;

console.log(score); // 80
console.log(copy); // 80

score = 100;

console.log(score); // 100
console.log(copy); // ?

μœ„ μ˜ˆμ œμ—μ„œ ? μ—λŠ” 무엇이 λ“€μ–΄κ°€μ•Ό ν• κΉŒ.

"λ³€μˆ˜μ— λ³€μˆ˜λ₯Ό ν• λ‹Ήν–ˆμ„ λ•Œ 무엇이 μ–΄λ–»κ²Œ μ „λ‹¬λ˜λŠ”κ°€?" 에 λŒ€ν•œ 닡변이 될 것이닀.

 

copy λ³€μˆ˜μ— μ›μ‹œ 값을 κ°–λŠ” score λ³€μˆ˜λ₯Ό ν• λ‹Ήν•˜λ©΄, ν• λ‹Ήλ°›λŠ” λ³€μˆ˜(copy)에 ν• λ‹Ήλ˜λŠ” λ³€μˆ˜(score)의 μ›μ‹œ κ°’ 80이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λœλ‹€.

➑️ score λ³€μˆ˜μ— μƒˆλ‘œμš΄ 숫자 κ°’ 100을 μž¬ν• λ‹Ήν•˜λ”λΌλ„, copy λ³€μˆ˜μ—λŠ” μ›μ‹œ κ°’ 80이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λ˜μ—ˆκΈ° λ•Œλ¬Έμ—, μ—¬μ „νžˆ copy λ³€μˆ˜μ˜ 값은 80이닀.

 

πŸ’‘ score λ³€μˆ˜μ™€ copy λ³€μˆ˜μ˜ κ°’ 80은 λ‹€λ₯Έ λ©”λͺ¨λ¦¬ 곡간에 μ €μž₯된 λ³„κ°œμ˜ 값이닀.

 

λ³€μˆ˜μ—λŠ” 값이 μ „λ‹¬λ˜λŠ” 것이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ μ „λ‹¬λœλ‹€.
λ³€μˆ˜μ™€ 같은 μ‹λ³„μžλŠ” 값이 μ•„λ‹ˆλΌ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό κΈ°μ–΅ν•˜κ³  있기 λ•Œλ¬Έμ΄λ‹€.

β€» μ‹λ³„μžλŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— 뢙인 이름이라고 ν•  수 μžˆλ‹€.

 


02. 객체

1) λ³€κ²½ κ°€λŠ₯ν•œ κ°’

πŸ–₯️ 예제 μ½”λ“œ

var person = {
    name: 'Lee'
};

객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜κ°€ κΈ°μ–΅ν•˜λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 톡해 λ©”λͺ¨λ¦¬ 곡간에 μ ‘κ·Όν•˜λ©΄ μ°Έμ‘° κ°’(reference value)에 μ ‘κ·Όν•  수 μžˆλ‹€.

μ°Έμ‘° 값은 μƒμ„±λœ 객체가 μ €μž₯된 λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ μ£Όμ†Œ, κ·Έ μžμ²΄λ‹€.

 

객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λŠ” "λ³€μˆ˜λŠ” 객체λ₯Ό μ°Έκ³ ν•˜κ³  μžˆλ‹€" λ˜λŠ” "λ³€μˆ˜λŠ” 객체λ₯Ό 가리킀고 μžˆλ‹€"라고 ν‘œν˜„ν•œλ‹€.

μœ„ μ˜ˆμ œμ—μ„œ person λ³€μˆ˜λŠ” 객체 { name: 'Lee' }λ₯Ό μ°Έκ³ ν•˜κ³ (가리킀고) μžˆλ‹€.

 

객체λ₯Ό ν• λ‹Ήν•œ λ³€μˆ˜λŠ” μž¬ν• λ‹Ή 없이 객체λ₯Ό 직접 λ³€κ²½ν•  수 μžˆλ‹€.

-> μž¬ν• λ‹Ή 없이 ν”„λ‘œνΌν‹° 동적 μΆ”κ°€ / ν”„λ‘œνΌν‹° κ°’ κ°±μ‹  / ν”„λ‘œνΌν‹° 자체λ₯Ό μ‚­μ œ κ°€λŠ₯

 

πŸ’‘ 얕은 볡사와 κΉŠμ€ 볡사

  • 얕은 볡사 : 1λ‹¨κ³„λ§Œ 볡사
  • κΉŠμ€ 볡사 : μž¬κ·€μ μœΌλ‘œ μ›μ‹œ κ°’κΉŒμ§€ μ „λΆ€ 볡사

 

2) 참쑰에 μ˜ν•œ 전달

πŸ–₯️ 예제 μ½”λ“œ

var person = {
    name: 'Lee'
};

// μ°Έμ‘° 값을 볡사(얕은 볡사)
var copy = person;

 

➑️ 객체λ₯Ό κ°€λ¦¬ν‚€λŠ” λ³€μˆ˜(원본, person) -> λ³€μˆ˜(사본, copy)에 ν• λ‹Ήν•˜λ©΄ μ›λ³Έμ˜ μ°Έμ‘° 값이 λ³΅μ‚¬λ˜μ–΄ μ „λ‹¬λœλ‹€.

➑️ 두 개의 μ‹λ³„μž(person, copy) κ°€ ν•˜λ‚˜μ˜ 객체λ₯Ό κ³΅μœ ν•˜κ²Œ λœλ‹€.

➑️ 원본 λ˜λŠ” 사본 쀑 μ–΄λŠ ν•œμͺ½μ—μ„œ 객체λ₯Ό λ³€κ²½(객체의 ν”„λ‘œνΌν‹° 값을 λ³€κ²½ν•˜κ±°λ‚˜ ν”„λ‘œνΌν‹° μΆ”κ°€, μ‚­μ œ)ν•˜λ©΄ μ„œλ‘œ 영ν–₯을 μ£Όκ³  λ°›λŠ”λ‹€.

 

 

πŸ“– 참고자료

https://www.inflearn.com/course/%EB%AA%A8%EB%8D%98-%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EB%94%A5%EB%8B%A4%EC%9D%B4%EB%B8%8C/dashboard

 

[무료] λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ”₯λ‹€μ΄λΈŒ μŠ€ν„°λ”” - μΈν”„λŸ° | κ°•μ˜

γ€Šλͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ λ”₯λ‹€μ΄λΈŒγ€‹ μ±… λ‚΄μš©μ„ κ·ΈλŒ€λ‘œ λ”°λΌκ°€λŠ” μŠ€ν„°λ”” μ˜μƒμž…λ‹ˆλ‹€. ν•¨κ»˜ κ³΅λΆ€ν•˜λ©΄ 훨씬 μ‰¬μ›Œμ§ˆ κ±°μ—μš”!, - κ°•μ˜ μ†Œκ°œ | μΈν”„λŸ°

www.inflearn.com