본문 바로가기
FRONTEND/Javascript

참조타입

by 또야또야 2020. 7. 29.
반응형

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();
  1. 참조 타입 Object 의 인스턴스를 생성하고,
  2. 변수 person에 할당합니다.

Object 타입

Object의 인스턴스를 명시적으로 생성하는 방법은 두 가지 입니다.

  1. new  연산자와 Object 생성자를 함께 쓰는 방법

  2. '객체 리터럴' 표기 방식 : { } 이용

프로퍼티 접근 방법

  1. 점으로 표기 하여 접근하는 방법

  2. 대괄호 표기법


Array 타입

ECMAScript의 배열은 다른 프로그래밍 언어의 배열과 매우 다릅니다. 데이터의 순서 있는 목록이라는 점은 다른 언어의 배열과 마찬가지지만, ECMAScript의 배열 슬롯에는 어떤 타입의 데이터라도 넣을 수 있습니다. 또한 동적으로 크기를 조절하므로 데이터를 추가하면 자동으로 커집니다. 

배열을 만드는 방법은 두가지 입니다.

  1. new 생성자와 Array 생성자를 함께 사용하는 방법 - new  연산자를 생략해도 됩니다.

  2. 배열 리터럴 표기법 : [ ]

 

 

반응형

댓글