반응형
JavaScript 는 객체 지향 언어이다. 즉, JavaScript의 대부분은 Object (객체) 이다.
객체가 아닌 유일한 요소는 Primitive Type (원시 자료형) 이다.
둘 사이의 차이점 중 하나는 기본 데이터 유형이 값(Value) 으로 전달되고 객체가 참조(Reference) 로 전달된다는 것 이다.
예시를 통해 비교해보면 다음과 같다.
let name = 'Carlos';
const firstName = name;
name = 'Color';
console.log(name); // Color
console.log(firstName); // Carlos
const myName = {
firstName: 'Carlos',
};
const identity = myName;
myName.firstName = 'Color';
console.log(myName.firstName); // Color
console.log(identity.firstName); // Color
String은 원시 자료형이므로 값 타입(Value Type)이다. 그래서 값은 복사되어 적용되며, 적용한 원본 변수의 값을 변경했을 때 사본은 적용되지 않는다.
그러나 Object는 참조 타입(Reference Type)이므로 원본이 변경되면 사본도 동일하게 변경된다.
배열(Array)과 함수(Function)도 object이므로 동일하게 참조 타입이다.
const a = [];
const b = a;
a.push (1);
console.log (a); // [1]
console.log (b); // [1]
console.log (a === b); // true
변수의 타입에 따라 값이 적용되고 저장되는 형태가 다릅니다.
개발 시 이런 차이를 명확히 알고 상황에 맞는 타입을 사용해야 합니다.
참고 자료
- https://hackernoon.com/grasp-by-value-and-by-reference-in-javascript-7ed75efa1293
- https://medium.com/dailyjs/back-to-roots-javascript-value-vs-reference-8fb69d587a18
반응형
'개발 언어 > 자바스크립트 33가지 개념' 카테고리의 다른 글
[JavaScript 33가지 개념] 05. == vs === vs typeof (0) | 2021.05.27 |
---|---|
[JavaScript 33가지 개념] 04. 암시적 강제(Implicit Coercion) (0) | 2021.05.22 |
[JavaScript 33가지 개념] 02. 자바스크립트의 자료형 (Primitive Types 등) (0) | 2021.05.13 |
[JavaScript 33가지 개념] 01. V8 JavaScript engine (Call Stack, Memory Heap) (0) | 2021.05.10 |
[JavaScript 33가지 개념] 00. 모든 JavaScript 개발자가 알아야 할 33 가지 개념 (0) | 2021.05.07 |
댓글