불변 객체(immutable)란? '변하지 않는 객체'
객체 생성 이후에는 객체의 상태가 바뀌지 않는 객체를 말한다.
[장점]
: 이해하기 쉽고 안정적인 서비스 개발에 도움이 된다.
: map, set, cache에 쓰기에 적절하다.
: thread-safe(멀티 스레드 프로그래밍) 하다?
: 불변 객체를 필드로 쓰면 방어적 복사를 할 필요가 없다.
불변객체를 만드는 방법으로
const와 Object.freeze()메소드를 사용하여 만들 수 있다.
const키워드는 변수를 상수로 선언할 수 있다. 일반적으로 상수로 선언된 변수는 값을 바꿀 수가 없다.
const animal = {name:'콩자', age: 10 }
animal.name = '사자'
console.log(animal)
//{name: '사자', age: 10} 출력
const 키워드로 선언된 animal변수에는
객체의 재할당은 불가능하지만 객체의 속성은 변경이 가능하다.
Object.freeze()
객체를 동결하기 위한 메소드다.
let animal = {name:'콩자', age: 10 }
Object.freeze(animal)
animal.name = '사자'
console.log(animal)
//{name: '콩자', age: 10} 출력
let animal = { name:'콩자', age: 10 }
Object.freeze(animal)
animal = {hobby:'축구'}
console.log(animal)
//{hobby: '축구'}
객체는 객체의 속성을 변경하는 시도는 불가능하다.
동결된 객체를 반환해주지만 객체의 재할당은 가능하다.
Object.assign()
타켓을 지정한 객체로 다른 객체의 속성을 복제하는 메소드이다.
function fn(person){
person = Object.assign({}, person)
person.name = 'lee'
return person
}
const o1 = {name:'kim'}
const o2 = fn(o1)
console.log(o1, o2)
// {name: 'kim'} {name: 'lee'} 출력
// 원본은 그대로 유지하고 복제본을 만들어 출력한다.