Open eunzy38 opened 4 years ago
1-5 불변 객체
1-5-1 불변 객체를 만드는 간단한 방법
값으로 전달받은 객체에 변경을 가하더라도 원본 객체는 변하지 않아야 하는 경우 필요
(바뀌기 전후에 대한 비교 정보가 필요한 경우)
copyObject
함수를 통해 객체를 복사한 후 내용 수정 가능▶얕은 복사
1-5-2 얕은 복사와 깊은 복사
얕은 복사 바로 아래 단계의 값만 복사 원본과 사본이 동일한 참조형 데이터의 주소 가르킴 result 객채에 target 객체의 프로퍼티들을 복사
var copyObject = function(target) {
var result = {};
for (var prop in target) {
result[prop] = target[prop];
}
return result;
}
깊은 복사 참조형 데이터는 다시 그 내부의 프로퍼티들을 복사 target이 객체인 경우 내부 프로퍼티들을 순회하며 호출
var copyObjectDeep = function(target) {
var result = {};
if (typeOf target === 'object' && target !== null) {
for (var prop in target) {
result[prop] = copyObjectDeep(target[prop]);
}
} else {
result = target;
}
return result;
}
불변 객체 : 기본형 데이터와 마찬가지로 기존 데이터는 변하지 않는다.
var copyObject - function (target) {
var result = {};
for (var prop in target) {
result [prop] = target[prop];
}
return result;
}
var copyObject - function (target) {
var result = {};
if (typeof target === 'object' && target !== null) {
for (var prop in target) {
result[prop] = copyObjectDeep(target[prop]);
}
else {
result = target;
}
}
return result;
};
불변 객체를 만드는 간단한 방법
얕은 복사와 깊은 복사
참조형 데이터의 가변은 데이터 자체가 아닌 내부 프로퍼치를 변경할 떄만 성립.
매번 새로운 객체를 만들어 재할당 하기로 규칙을 정하거나 자동으로 새로운 객체를 만드는 도구를 활용 한다면 객체 역시 불변성을 확보할 수 있다
얕은 복사(shallow copy)는 바로 아래 단계의 값만 복사하는 방법이고, 깊은복사(deep copy)는 내부의 모든 값들을 하나한 찾아서 전부 복사하는 방법이다.
기본형 데이터일 경우에는 그대로 복사하면 되지만 참조형 데이터는 다시 그 내부의 프로퍼티들을 복사 해야함.
이과정을 참조형 데이터가 있을 때마다 재귀적으로 수행해야만 비로소 깊은 복사가 된다
불변객체
1. 불변객체를 만드는 방법
2. 얕은 복사
3. 깊은 복사
1) 불변 객체를 만드는 간단한 방법
불변 객체(immutable object) : 한번 생성된 후 변경할 수 없는 객체를 뜻하고 변경할 수 없기 때문에 멀티쓰레드 환경에서 마음 놓고 사용할 수 있다는 장점이 있음.
내부 프로퍼티를 벼녕할 필요가 있을 때마다 매번 새로운 객체를 만들어 재할당하기로 규칙을 정하거나 자동으로 새로운 객체를 만드는 도구를 사용한다면 객체역시 불변성을 확보할 수 있음.
불변 객체가 필요한 상황 : 값으로 전달밥은 객체에 변경을 가하더라도 객체는 변하지 않아야 하는 경우가 발생함. 이런경우 불변 객체가 필요.
2) 얕은 복사와 깊은 복사
얕은 복사(shallow copy) : 바로 아래 단계의 값만 복사 즉 중첩된 객체에서 참조형 데이터가 저장된 프로퍼티를 복사할 때 그 주솟값만 복사한다는 의미
깊은 복사(doop copy) : 내부의 모든 값들을 하나하나 찾아서 전부 복사하는 방법 즉 어떤 객체를 복사할 때 객체 내부의 모든 값을 복사해서 완전히 새로운 데이터를 만들고자 할 때, 객체의 프로퍼티 중에서 그 값이 기본형 데디터일 경우 그대로 복사하면 되지만 참조형 데이터는 다시 그 내부의 프로퍼티들을 복사해아함. 이 과정을 참조형 데이터가 있을 때마다 재귀적으로 수행해야만 비로소 깊은 복사가 되는것.
study 완료 후 체크 부탁드립니다.