glowing713
Frontend-Deep-Dive
glowing713
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (97)
    • Languages (11)
      • JavaScript πŸ’› (3)
      • Python 🐍 (4)
      • Java β˜•οΈ (3)
      • Swift 🧑 (1)
    • Computer_Science (1)
      • Computer_Network πŸ•Έ (1)
    • Web_Frontend (4)
      • Vue.js (1)
    • Problem_Solving (76)
    • Server (1)
      • Spring πŸ€ (1)
    • AI (2)
      • NLP πŸ—£ (1)
      • AI_Math βž— (1)
    • κ°œλ°œν™˜κ²½ κΎΈλ―ΈκΈ° ✌ (1)
    • 생각정리 ✍🏻 (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ§‘πŸ»β€πŸ’»Github

곡지사항

인기 κΈ€

νƒœκ·Έ

  • ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
  • Python
  • binary search
  • 완전탐색
  • λ™μ κ³„νšλ²•
  • 2019 카카였 개발자 겨울 인턴십
  • 이뢄탐색
  • ps
  • bfs
  • c++
  • Stack
  • Algorithm
  • brute-force
  • mst
  • Baekjoon
  • DP
  • Java
  • BOJ
  • 카카였 기좜
  • boostcampaitech

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
glowing713

Frontend-Deep-Dive

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ μ›μ‹œ κ°’κ³Ό 객체(Immutability, Mutability)
Languages/JavaScript πŸ’›

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ μ›μ‹œ κ°’κ³Ό 객체(Immutability, Mutability)

2021. 12. 6. 23:59

ECMAScript6(ES6)λŠ” 7개의 데이터 νƒ€μž…(number, string, boolean, undefined, null, symbol, object)을 μ œκ³΅ν•œλ‹€.
μ΄λŠ” 크게 μ›μ‹œ νƒ€μž…(primitive type)κ³Ό 객체 νƒ€μž…(object/reference type)으둜 ꡬ뢄할 수 μžˆλ‹€.

 

μžλ°”μŠ€ν¬λ¦½νŠΈ μ›μ‹œ νƒ€μž…(Primitive Type)

  • κ°’μ˜ 변경이 λΆˆκ°€λŠ₯ν•œ κ°’(Immutable Value)
  • λ³€μˆ˜μ— ν• λ‹Ήλœ 값은 더 이상 변경이 될 수 μ—†λ‹€!! μ—¬κΈ°μ„œ μ€‘μš”ν•œ ν¬μΈνŠΈλŠ” μ›μ‹œ κ°’ 자체λ₯Ό λ³€κ²½ν•  수 μ—†λ‹€λŠ” 것이지 λ³€μˆ˜ 값을 λ³€κ²½ν•  수 μ—†λ‹€λŠ” 것이 μ•„λ‹ˆλ‹€.
  • number, string, boolean, undefined, null, symbol νƒ€μž…μ΄ 이에 ν•΄λ‹Ήλœλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 객체 νƒ€μž…(Object Type)

  • κ°’μ˜ 변경이 κ°€λŠ₯ν•œ κ°’(Mutable Value)
  • λ³€μˆ˜μ— ν• λ‹Ήλœ 값을 μˆ˜μ •ν•  수 μžˆλ‹€!
  • object νƒ€μž…μ΄ 이에 ν•΄λ‹Ήλœλ‹€.

각 μžλ£Œν˜•μ˜ νŠΉμ§•μ„ 쑰금 더 깊게 μ΄ν•΄ν•˜κΈ° μœ„ν•΄ λ©”λͺ¨λ¦¬ μΈ‘λ©΄μ—μ„œ μƒκ°ν•΄λ³΄μž.

λ³€μˆ˜μ— 값을 볡사할 λ•Œ, λ©”λͺ¨λ¦¬μ—μ„œλŠ” μ–΄λ–€ 일이 μΌμ–΄λ‚ κΉŒ?

이 κ°œλ…μ—μ„œ μ€‘μš”ν•œ ν¬μΈνŠΈλŠ” λ³€μˆ˜μ—μ„œ λ³€μˆ˜λ‘œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό λ„˜κ²¨μ€€λ‹€λŠ” 점 이닀.

이 κ°œλ…μ— κΈ°μ΄ˆν•˜μ—¬ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ›μ‹œ κ°’κ³Ό 객체의 νŠΉμ§•μ„ κ³΅λΆ€ν•΄λ³΄μž.

 

μ›μ‹œ κ°’, Immutable

var score = 80;
var copy = score;

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

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

 

copy = score ꡬ문을 μ‹€ν–‰ν•  λ•Œ λ‹€μŒ 두 λ°©μ‹μœΌλ‘œ 해석이 κ°€λŠ₯ν•˜λ‹€.

 

1. μƒˆλ‘œμš΄ 80을 μƒμ„±ν•΄μ„œ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό 전달. 두 λ³€μˆ˜κ°€ κΈ°μ–΅ν•˜λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ λ‹€λ₯΄λ‹€.

좜처: λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive

 

2. score의 값인 80의 μ£Όμ†Œλ₯Ό κ·ΈλŒ€λ‘œ copy에 전달. 두 λ³€μˆ˜κ°€ κΈ°μ–΅ν•˜λŠ” λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ κ°™λ‹€. νŒŒμ΄μ¬μ€ 이 방식을 μ μš©ν•œλ‹€.

좜처: λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive

 

MDN λ¬Έμ„œλ₯Ό 확인해보면 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ μ›μ‹œ 값은 1번 방식을 μ±„νƒν•˜κ³  μžˆλ‹€λŠ” 것을 확인할 수 μžˆλ‹€.

 

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

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

developer.mozilla.org

μƒˆλ‘­κ²Œ μƒμ„±λœ μ›μ‹œ κ°’μ˜ μ£Όμ†Œλ₯Ό μ €μž₯ν•˜κ³  이 μ£Όμ†Œλ₯Ό 톡해 값에 μ ‘κ·Όν•˜κ²Œ λœλ‹€.

 

객체, Mutable

var person = {
    name: 'Lee'
};

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

copy = person ꡬ문을 μ‹€ν–‰ν•˜κ²Œ 되면 두 λ³€μˆ˜λŠ” 같은 μ£Όμ†Œμ— μ €μž₯된 값을 가리킨닀.

person은 copyμ—κ²Œ μƒμ„±λœ 객체의 μ£Όμ†Œλ₯Ό λ„˜κ²¨μ€¬κΈ° λ•Œλ¬Έμ΄λ‹€.

결과적으둜 copy와 person은 값이 변경될 λ•Œ μ„œλ‘œκ°€ μ„œλ‘œμ—κ²Œ 영ν–₯을 주게 λœλ‹€.

좜처: λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive

 

마무리

이 λ‹¨λ½μ˜ 핡심은 μ›μ‹œ 값은 값을 λ³΅μ‚¬ν•˜μ—¬ μ£Όμ†Œ 값을 λ„˜κ²¨μ£ΌκΈ° λ•Œλ¬Έμ— μ„œλ‘œ κ°„μ„­ν•  수 μ—†λ‹€λŠ” 점, κ°μ²΄λŠ” μ£Όμ†Œ 값을 λ„˜κ²¨μ£ΌκΈ° λ•Œλ¬Έμ— μ„œλ‘œ 영ν–₯을 주고받을 수 μžˆλ‹€λŠ” 점이닀.

두 데이터 νƒ€μž…μ˜ 차이λ₯Ό λͺ…ν™•νžˆ μ΄ν•΄ν•œλ‹€λ©΄ λͺ©μ μ— 맞게 μ„ νƒν•˜μ—¬ 착였 없이 κ°œλ°œμ„ μ§„ν–‰ν•  수 μžˆμ„ 것 κ°™λ‹€πŸ”₯

 

 

Reference

https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures#κΈ°λ³Έ_νƒ€μž…_primitive_value
https://developer.mozilla.org/ko/docs/Glossary/Primitive
https://www.geeksforgeeks.org/call-by-value-vs-call-by-reference-in-javascript/
λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive 11μž₯ μ›μ‹œ κ°’κ³Ό 객체의 비ꡐ

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'Languages > JavaScript πŸ’›' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JS] μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλŠ” 이유  (0) 2021.12.07
[JS] λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(Hoisting)에 λŒ€ν•˜μ—¬  (0) 2020.02.19
    'Languages/JavaScript πŸ’›' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [JS] μžλ°”μŠ€ν¬λ¦½νŠΈ ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλŠ” 이유
    • [JS] λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…(Hoisting)에 λŒ€ν•˜μ—¬
    glowing713
    glowing713

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”