var user = {
name: "john",
age: 20,
}
var getAged = function (user, passedTime) {
/// 이부분에 로직 작성
}
var agedUser = getAged(user, 6);
var agedUserMust~~ = function (user1, user2) {
if (!user2) {
console.log("Failed! user2 doesn't exist!");
} else if (user1 !== user2) {
console.log("Passed! If you become older)
} else {
console.log("Failed! User same with past one");
}
}
agedUserMustBeDifferentFromUser(user, agedUser);
agedUserMust~~ 함수 안에 두번 째 콘솔인 Passed!
나오도록 로직을 작성하는 문제 디버깅 모드로 함수를 한줄씩 실행해보니
변수 user2가 undefined 상태였다.
agedUser가 호출되면서 getAged 함수가 실행되는 상태. 주어진 변수인
user, passedTime, 6 활용해 로직을 작성해보자
시도 1)
var getAged = getAged(user, passedTime);{
agedUser = user
agedUser.age =+ passedTime
return agedUser
}
결과는 Failed! User가 동일하다는 내용이다?!
이게 무슨 말인가 생각해보니 데이터 타입에 관해 공부할 때
참조형 데이터는 가변성을 가지고 있다는 내용이 생각났다. 데이터의 주소를 참조하기 때문에
복사하고 데이터를 수정하면 복사하기 전 데이터도 참조값을 변경한다.
ex) var obj1 = {a:10, b: 'aaa'}
var obj2 = obj1
obj2.a = 20 => obj1의 a가 참조하고 있는 데이터의 주소가 20이 가리키고 있는 데이터로 변경됨
그렇다면 객체 자체를 변경하면 어떨까?
var obj1 = { c: 10, d: 'ddd'};
var obj2 = obj1;
obj2 = { c: 20, d: 'aaa'};
obj2를 위한 별도의 데이터 공간이 생성된다.시도 2) 성공! var getAged = getAged(user, passedTime);{ agedUser = user agedUser = {name:user.name, age:user.age+passedTime) return agedUser }객체 자체를 복사한 이후 값을 변경해주었다. 참조형 데이터 자체를 변경할 경우
가변적이지 않다는 것을 알았다. 사용할때마다 값이 변할 수 있고 객체 자체를 변경해야
한다면 코드 작성이 어렵지 않을까? 객체의 가변성과 활용방안에 대해 더 공부해야겠다.