javascript 33가지 기본 컨셉: 3. Value and Reference

2019. 3. 18. 01:55javascript/Basic Conception

javascript 33가지 기본 컨셉: 3. Value and Reference

항상 애용하고 있는 노마더코드 니콜라스 선생님이 새로운 강의를 시작하셨는데 나름 흥미가는 주제라 하루에 하나씩( 진짜 특별한 일이 없으면 이를 지킬려고 노력할 것이다.) 포스팅할 것이다. 나도 다른 사람의 강의 혹은 깃을 보고 하는 거라서 url을 첨부해놓는다. 


youtube: https://www.youtube.com/watch?v=QkFkFqg-J04
git: https://github.com/leonardomso/33-js-concepts



c언어 할때 call By Reference와 call By Value가 생각이난다. 하나는 value만을 이용하고 하나는 주소를 넘겨 주어서 주소값에 위치한 메모리의 값을 바꾸는 것이었다. Javascript도 자료형에 따라서 value인지 reference를 이용할 수 있어서 정리하려고 한다.


Value


value는 주소의 메모리에 존재하는 값을 바꾸는 것이 아니라 값을 복사해서 집어 넣는다. 


예를 들어 


만약 call By Reference였다면 b=3;구문에서 a도 3으로 바뀌어야 한다. 하지만 바뀌지 않은 것을 봐서는 value를 복사해준 걸로 알 수 있다. 


이번에는 문자열을 확인해보겠다. 



이번에도 callByValue 처럼 바뀌지 않았다. 이를 통해 string형 역시도 value를 통해 값만 바꾸는 것을 알 수 있었다. 


callByValue에는 String, number, boolean, Nan, undefined 등이 있다.



Reference


레퍼런스는 주소를 전달해주어 메모리에 있는 값을 바꾸어주어 같은 메모라에 참조하고 있는 객체의 값도 같이 바꾸어준다. 

다시 생각해보면 당연한 일이다. 예시를 들어보겠다.....



이 사진을 자세히 보면 nameArray에 더 값을 넣어 줬는데 schoolName에도 추가되어 있고 schoolName에 값을 추가해줬으면 nameArray도 값이 바뀐 것을 볼 수 있다. 이것은 당연히 callByReference이다. 


이번에는 Json형태의 데이터를 변형 시켜보겠다. 




사진을 보면 info와 copyInfo는 같은 주소를 참조하고있다. 그래서 info를 바꾼 후 copyInfo를 출력해보면 copyInfo도 동일하게 값이 바뀐 것을 볼 수 있다.

이와 같이 Array, Json, Function의 데이터를 이용할 때는 CallByReference가 된다는 것을 알아야한다. 


 그래서 배열이나 Json의 경우 단순히 비교하는 것은 당연히 false가 나온다. 이를 유의해서 사용해보자!!