개발공작소
article thumbnail
728x90

 

 

 

 

저번에 정리에 이은 2번째.. 글이 길어져서 참조타입에 대해 정리 못한게 있어 짧게 정리하려 한다.

 

다음과 같은 코드가 있다고 생각해보자.

 

 

샘플코드1

let user = {
  name: "john",
};

const changeUser = (user_copy) => {
  user_copy.name = 'bome'
  console.log(user.name) // 결과값: "bome"
  console.log(user_copy.name) // 결과값: "bome"
};

changeUser(user);

 

 

샘플코드2

let user = {
  name: "john",
};

const changeUser = (user_copy) => {
  user_copy = {
    name: "bome",
  };
  console.log(user.name) // 결과값: "john"
  console.log(user_copy.name) // 결과값: "bome"
};

changeUser(user);

 

 

위 2개의 샘플코드는 user라는 객체를 선언하고 changeUser함수의 파라메터로 담아 호출한다.

그리고 해당 함수 안에서 파라메터로 받은 user_copy를 "변경(?)"한다.

 

그런데 결과를 보면 뭔가 이상하다.

 

샘플코드1은 객체를 복사한 값을 변경했을 때, 원본 객체의 값도 제대로 변경이 되었다. 하지만

샘플코드2의 경우에는 객체를 복사한 값을 변경했을 때, 원본 객체의 값이 제대로 변경되지 않았다.

 

와 같이 보인다..

 

분명 예전에 배운 건 객체는 참조타입이기 때문에, 같은 메모리에 할당되고, 같은 참조경로를 가지기 때문에

객체를 복사한 변수를 변경하면 원본 객체의 값도 변경이 된다고 했었었다...

 

그럼 왜 그런 것일까?

 

사실 샘플코드2 같은 경우에는 객체를 새로운 변수에 복사한 것이 아닌,

새로운 변수(user_copy)에 새로운 객체값을 할당 한 것이다.

 

대충 이런 느낌..

 

 

 

 

아무튼 정리할 게 많이 없다. 그냥 안까먹으려고 블로그에 정리했다.

당연한건데도 개발을 하다보면 계속 까먹어서....

 

 

 

728x90
profile

개발공작소

@모찌바라기

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!