Javascript: 원시 타입과 객체 타입

kimsnmyng·2024년 12월 8일

Vanilla Javascript

목록 보기
14/23

// 원시 타입과 객체 타입은 값이 저장되거나 복사되는 과정이 서로 다르다.
// 원시 타입은 값 자체로써 변수에 저장되고 복사 된다.
// 객체 타입은 참조값을 통해 변수에 저장되고 복사 된다.

// 원시 타입은 값은 값이 저장되고 복사되는 과정에서, 메모리에 저장된 값이 변경되지 않는다. (불변)
// 변수의 값이 바뀌지 않아서 불변이 아니라, 메모리 주소에 저장된 값이 바뀌지 않는다는 것을 말한다.
// 수정되기 이전의 값과 수정된 후의 엄밀히 값은 다르다.

// 객체는 값이 저장되어 있는 메모리의 주소를 가르키는 참조 값을 가르키는 것이다. 

//ex

let o1 = {name: "김선명"};

// o1 -> 0x0000x(참조값) -> {name: "김선명"}

// 객체 값을 이렇게 저장하는 이유는 여러개의 값을 저장함과 동시에, 저장되는 값의 개수가 동적으로 변화하기 때문에.
// 객체는 값을 수정하게 되면, 원시 타입과는 다르게 객체의 원본 값을 같이 수정하게 된다.
// 따라서 객체는 가변값이다. 
// 그래서 의도치 않게 값이 수정될 수 있다. 그래서 객체를 복사 할 때는

let o1 = {name: "김선명"};
let o2 = {...o1}; // 깊은 복사로 안전하게 복사 해야한다.

// let o2 = o1 얕은 복사

// o1과 o2는 다른 값을 참조하게 된다.
// 객체간의 비교 연산은 참조 값을 기준으로 연산한다.
// o1 === o2 (얕은 비교)
// JSON.stringify(o1) === JSON.stringify(o2) (깊은 비교)

// 배열과 함수도 객체이다.

profile
안녕하세요 김선명입니다.

0개의 댓글