19강 참조형, 원시형 데이터 타입

front·2022년 11월 8일
0

19강 참조형, 원시형 데이터 타입

자바스크립트 자료 타입에는 두가지가 있다

참조형, 기본형

const number = 1; 기본형

const num2 = number; number의 진짜 복사본을 생성하고 그게 num2다. 값 1을 num2에 복사한 것

숫자, 스트링, 불린은 모두 기본형 자료 타입

재할당하거나 변수를 다른 변수에 저장할 때마다 값을 복사한다.

객체와 배열은 참조형 자료 타입

const person = {

name : ‘hyejin’,

}

const secondPerson = person;

객체 person을 복사한 것이 아니고 person 객체 데이터가 저장되어 있는 메모리주소를 가리키는 포인터가 복사된다.

person객체는 메모리에 저장되어 있고, 상수 person에는 데이터가 저장되어 있는 메모리 주소를 가리키는 포인터를 저장

person.name = ‘max’;

console.log(secondPerson);

name : ‘max’ 가 출력됨

secondPerson에 있는 name프로퍼티의 값도 바뀐 것

왜? 주소를 가르키는 포인터를 복사했고, 그 포인터가 가르키는 메모리에 있는 person 데이터 객체를 가리키기 때문이다.

그래서 person.name 을 변경하면 자동적으로 secondPerson.name 도 바뀐다.

그래서 메모리 주소를 가르키는 포인터가 아닌 객체를 복사해야함

스프레드 연산자를 이용해서

const person = {

name : ‘nax’

};

const secondPerson = {…person};

person.name = ‘max’

console.log(secondPerson)

name : ‘max’ 출력됨

포인터가 아닌 진짜 복사본을 생성했기 때문에

재할당(안에 있는 값을 바꾸면)한다면 값이 아닌 포인터를 복사하는 것이고 → 원본이 변경됨

진짜로 복사하고 싶으면

새로운 객체를 생성해서 전체 객체를 복사하는 것이 아니라 그 안에 있는 프로퍼티를 복사해야한다.

profile
그냥 하기

0개의 댓글