나이든 유저

김종화·2023년 6월 14일

JavaScript

목록 보기
8/18
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
}

객체 자체를 복사한 이후 값을 변경해주었다. 참조형 데이터 자체를 변경할 경우
가변적이지 않다는 것을 알았다. 사용할때마다 값이 변할 수 있고 객체 자체를 변경해야
한다면 코드 작성이 어렵지 않을까? 객체의 가변성과 활용방안에 대해 더 공부해야겠다.

0개의 댓글