Javascript의 변수는 원시 값과 참조 값 두 가지 타입의 데이터를 저장 할 수 있습니다.
- 원시 값 : 단순한 데이터 - 값으로 접근
undefined null Boolean Number String
- 참조 값 : 여러 값으로 구성되는 객체 - 참조로 접근
자바스크립트는 메모리 위치에 직접 접근하지 않고 객체에 대한 참조를 조작합니다. 값은 메모리에 저장된 객체입니다.
Array Object
값 복사
원시 값과 참조 값은 저장되는 방식 외에도 특정 변수에서 다른 변수로 값을 복사 할 때도 다르게 동작합니다.
- 원시 값 : 현재 저장된 값을 새로 생성한 다음 새로운 변수에 복사합니다.
const num1 = 5;
const num2 = num1;
복사한 값은 기존의 변수와 완전히 분리되어 있습니다.
- 참조 값 : 변수 복사를 시도할 경우, 값이 아니라 힙(heap)에 저장된 객체를 가리키기만 합니다.
const obj1 = new Object();
const obj2 = obj1;
obj1.name = "DD"
console.log(obj2.name); // "DD"
console.log(obj1 === obj2); // true
복사가 끝나면 두 변수는 정확히 같은 객체를 가리킵니다.
한 객체가 아닌 두 객체를 분리하여 복사하기 위해서는, Object.assign()이나 spread 연산자를 이용할 수 있습니다.
** 힙(heap)이란 애플리케이션이 운영체제로부터 미리 할당받는 메모리 영역입니다.
일반적으로 애플리케이션이 실행되는 동안 메모리 요구량은 계속 바뀌는데, 그 때마다 운영 체제에 메모리를 요구하고 반환하길 반복한다면 상당한 성능저하가 있으므로 보통은 일정량의 메모리를 넘겨받아 그 안에서 자유롭게 사용합니다. 힙 메모리는 '브라우저가 사용하는 메모리' 라고 생각하면 됩니다.
객체는 특정 참조 타입의 '인스턴스 - Instance' 입니다. 참조 타입을 '클래스' 라고 부르는 사람이 많은데, 이는 잘못된 표현입니다. ECMAScript는 객체 지향 언어이긴 하지만 객체 지향 프로그래밍에서 널리 쓰이는 클래스나 인터페이스 같은 구조를 갖고 있지 않습니다.
객체를 생성 할 때는 new 연산자 뒤에 '생성자'를 씁니다. 생성자는 객체를 생성하는 함수 입니다.
const person = new Object();
- 참조 타입 Object 의 인스턴스를 생성하고,
- 변수 person에 할당합니다.
Object 타입
Object의 인스턴스를 명시적으로 생성하는 방법은 두 가지 입니다.
-
new 연산자와 Object 생성자를 함께 쓰는 방법
-
'객체 리터럴' 표기 방식 : { } 이용
프로퍼티 접근 방법
-
점으로 표기 하여 접근하는 방법
-
대괄호 표기법
Array 타입
ECMAScript의 배열은 다른 프로그래밍 언어의 배열과 매우 다릅니다. 데이터의 순서 있는 목록이라는 점은 다른 언어의 배열과 마찬가지지만, ECMAScript의 배열 슬롯에는 어떤 타입의 데이터라도 넣을 수 있습니다. 또한 동적으로 크기를 조절하므로 데이터를 추가하면 자동으로 커집니다.
배열을 만드는 방법은 두가지 입니다.
-
new 생성자와 Array 생성자를 함께 사용하는 방법 - new 연산자를 생략해도 됩니다.
-
배열 리터럴 표기법 : [ ]
'FRONTEND > Javascript' 카테고리의 다른 글
Javascript의 this (0) | 2020.08.19 |
---|---|
Javascript Function - Function 타입 (0) | 2020.08.03 |
웹 브라우저의 메모리 관리 - 가비지 컬렉션(Garbage Collection) (0) | 2020.07.29 |
LocalStorage & SessionStorage (0) | 2020.05.09 |
ES6 문법 (2) (0) | 2020.05.09 |
댓글