[repl.it] 원시타입과 참조타입

Daye Kang·2020년 2월 2일
0

Assignment

  • addProperty 함수 구현
  • info라는 인자를 받는다. info는 객체이며 profile 객체에 추가할 프로퍼티 정보가 들어있다.
  • 예를 들어 { age: 20 } 라는 객체를 넘기게 된다.
  • profile 객체를 복사하여 새로운 객체에 프로퍼티를 추가하여 리턴한다.
  • 하지만 원래의 profile 객체는 그대로 보존되어야 한다.
let profile = {
  name: "김개발",
  address: {
    home: "한강아파트",
    company: "위워크 선릉2호점"
  },
  hobby: "programming"
}

const addProperty = info => {
  let addedProfile = profile;
  addedProfile[info.key] = info.value  //처음에 내가 접근했던 방식
  console.log('addedProfile => ', addedProfile);
  console.log("key => ", info.key)
  return merged;
}


// 호출 예
let newProfile = addProperty({ age: 20 });
console.log('profile => ', profile);
console.log('newProfile =>', newProfile);

// 처음에 내가 접근했던 방식과 어떻게 assign을 쓰게 되었고 그 결과
// 어떤 결과를 도출하게 되었는지 블로깅

이렇게 했을 경우 계속 undefined가 떠서 어떻게 해야 할지에 대해 계속 고민을 하다가
내가 문제를 잘못 파악했음을 깨달음. 나는 'addProperty'라는 method가 있는 거라고 계속 생각을 했는데 다시 문제를 읽어보니 'addProperty'라는 함수를 만들어서 호출을 하기 위함이었음. 문제는 원래 객체를 건드리지 않고 새로운 객체에 새로 추가된 내용을 넣어 리턴을 해야 했고, 힌트에서 객체 merge가 되어야 한다는 것을 보고 구글링을 해보니 key-value를 추가하는 방식 중에 Object.assign이 있음을 알게 되어 Object.assign으로 접근.

 let merged = Object.assign({}, addedProfile, info);

이렇게 접근했을 경우의 console 창.

profile =>  { name: '김개발',
  address: { home: '한강아파트', company: '위워크 선릉2호점' },
  hobby: 'programming' }
newProfile => { name: '김개발',
  address: { home: '한강아파트', company: '위워크 선릉2호점' },
  hobby: 'programming',
  age: 20 } // { age: 20 } key-value 추가

Object.assign() 메소드는 열거할 수 있는 하나 이상의 출처 객체로부터 대상 객체로 속성을 복사할 때 사용하는 것으로 대상 객체를 반환합니다.

profile
뭐든 하자

0개의 댓글