본문 바로가기
내마음대로만들어보자/React 프로젝트 만들기 이해

[React] 자바스크립트 - 객체

by 소농민! 2021. 11. 16.
728x90

1. 객체

- 오직 한 타입의 데이터만 담을 수 있는 원시형과 달리, 다양한 데이터를 담을 수 있다.

- key로 구분된 데이터 집합, 복잡한 개체를 저장할 수 있다.

- {...} 중괄호 안에 여러 쌍의 프로퍼티를 넣을 수 있다.

   프로퍼티는 key : vaule 로 구성

   key에는 문자형, value에는 모든 자료형이 들어갈 수 있다.

 

// 객체 생성자로 만들기

let cat = new Object();

 

// 객체 리터럴로 만들기

// 중괄호로 객체를 선언하는 걸 리터럴이라고 하는데, 객체 선언할 때 주로 쓴다.

let cat = {};

 

let num = 1;  이런게 있다라면 엔진에서는 let num - new Number(1); 로 이렇게 해석을 하고

우리는 리터럴로 작성하지만 엔진입장에서는 생성자 사용해서 생성되는걸로 자동 해석해서 인식한다. 

 

2. 상수는 재할당이 진짜 안되는것인가?

- const로 선언된 객체는 수정될 수 있다.

- const로 선언된 객체에 대한 참조를 변경하지 못한다는 것을 의미

- 객체의 프로퍼티는 보호되지 않는다.

 

// my_cat이라는 상수를 만든다.

const my_cat = {

    name: "navi",

    status: "기분좋음",

}

my_cat.name = "나비";

 

console.log(my_cat)

// 고양이 이름이 바뀐걸 알 수있다.

// 하지만 아래에서는 에러가 난다. 프로퍼티는 변경이 되지만, 객체 자체를 제할당할 순 없다.

 

my_cat = {name: "나비", status: "많이 언짢음"};

 

임의의 메모리가 있다면 변수를 선언하고 초기화되어 할당되서 값이 들어간다.

그런데 여기 값이 들어가는게 원시형과 객체형은 다르게들어간다.

 

선언한 이 변수에 숫자1을 할당한다면,

원시형은 메모리에 숫자 1이 들어간다.

 

만약에, 변수 b 에 array를 넣는다면 다른공간에 객체 값이 들어가게되고 b 에는 array에 주소가 들어가게된다.

이거를 참조가 들어간다고 한다. 객체에 대한 참조가 들어간다. 

그렇기때문에 변수안에 객체에 있는 데이터가 변해도 주소는 변하지 않으므로 const로 상수를 만들어도 주소는 안변하기때문에 객체 자체는 수정을 할 수가 있게된다. 

이를, 객체 프로퍼티를 보호하지않는다고도 한다.