본문 바로가기
자바스크립트

참조타입(객체)의 특성

by 리양 2021. 7. 1.

자바스크립트에서 객체를 할당받은 변수는 객체 그 자체가 아니라 객체를 참조하는 값을 저장한다.

무슨 말인지 하나도 모르겠으니까 일단 예시를 보자.

 

//객체 생성
var objA = {
 var : 40
 };
 
var objB = objA;
 
console.log(objA.val)  // 40
console.log(objB.val)  // 40
 
// objA 값을 할당받는 objB의 프로퍼티를 수정해봤다.

var objB = 50;
 
console.log(objA.val)  // 50
console.log(objB.val)  // 50

//나는 objB만 값을 바꿧는데 objA 바뀌어져 있다??? 
// 그 이유는 objA와 objB는 동일한 객체를 참조하고 있기 때문이다.

둘다 같은것을 참조하고 있어요

 

동등연산자(==)를 사용하여 두 객체를 객체를 비교할 때, 객체의 프로퍼티값이 아닌 참조값을 비교한다.

 

var a = 100;
var b = 100;

console.log(a == b); //true 

// 기본타입을 비교할 때는 값을 비교한다.
// ( var a와 var b안에 들어가있는 값은 똑같이 100이니 true )



// 하지만 참조타입일 때는 이렇게 달라진다.


var objA = {value:100}
var objB = {value:100}
var objC = objB;

console.log(objA == objB) // false ( 각각 다른값을 참조하고 있다 )
console.log(objB == objC) // true (같은 값을 참조하고 있다. 자세한 설명은 예시그림을 보자)

 

어디를 참조하는지를 잘 보세요

 

 

 

참조에 의한 호출 방식

 

기본타입

  • 값에 의한 호출 (Call By Value) 방식으로 동작.
  • 함수를 호출할 때 인자로 기본타입의 값을 넘길 경우, 호출된 함수의 매개변수로 복사된 값이 전달된다.

 

참조타입(객체) 

  • 참조에 의한 호출(Call by Reference) 방식으로 동작.
  • 함수를 호출할 때 인자로 참조 타입인 객체를 전달할 경우, 객체의 프로퍼티값이 함수의 매개변수로 복사되지 않고, 인자로 넘긴 객체의 참조값이 그대로 함수 내부로 전달된다.

 

이것도 뭔말인지 잘 모르겠으니까 예시를 함 보자.

 

var a = 100;
var objA = {value : 100};


function changeArg(num.obj){
	num = 200;
    obj.value = 200;
    
    console.log(num);
    console.log(obj);
 }
 
 changeArg(a,abjA);     
 
 // 값을 변경하는 함수를 호출하고 
 // 인자값으로 기본 타입인 숫자를 가진 변수 a와 참조타입인 객체 objA를 넘겨보니.....
 
 
 console.log(a);
 console.log(objA);
 
 
//changeArg() 결과값

200
{value : 200 }         // 함수를 통해서 주어진 값이 변경됬다.


// 함수호출이 끝난 후의 a 와 objA

100		 	 // 기본타입 : 함수의 영향을 받지 않았다.
{value : 200 } 		 // 참조타입 : 함수의 영향을 받았다