[JAVASCRIPT] 데이터타입-참조타입의 특성
참조타입
기본 타입인 숫자, 문자열, 불린값, null, undefined 5가지를 제외한 모든 값은 객체이다.
자바스크립트에서는 이러한 객체를 참조타입이라고 하는데 객체의 모든 연산이 실제값이 아닌 참조값으로 처리되기 때문에 이러한 특성을 잘 숙지해야한다.
흔히 객체 지향언어에서의 참조변수의 개념을 떠올리면 이해하기 쉽다. 참조변수는 데이터를 담고 있는 주소값만을 가지고 있는 변수이기 때문에 두 참조변수가 하나의 객체를 참조할 수도 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
//objA라는 변수는 생성된 객체의 참조값을 가지고 있다.
var objA = {
val : 40
};
//동일한 객체를 참조하는 두 변수
var objB = objA;
console.log(objA.val); // 40
console.log(objB.val); // 40
//객체 값 갱신
objB.val = 50;
console.log(objA.val); // 50
console.log(objB.val); // 50
|
cs |
객체 비교
동등 연산자(==)를 사용하여 두 객체를 비교할 때도 객체의 프로퍼티값이 아닌 참조값을 비교한다는 것에 주의해야 한다.
참조 타입의 경우 참조값, 즉 참조하고 있는 value의 주소가 같아야 true가 나온다.
단순 value 값만 같다면 false가 나오게 된다.
1
2
3
4
5
6
7
8
9
10
11
|
var a =100;
var b = 100;
var objA = { value: 100 };
var objB = { value: 100 };
var objC = objB;
console.log(a==b); // true
console.log(objA==objB); // false
console.log(objB==objC); // true
|
cs |
참조에 의한 함수 호출 방식
기본타입과 참조 타입의 경우 함수 호출 방식도 다르다.
기본 타입의 경우 값에 의한 호출 call by value 방식으로 동작한다.
이는 함수 호출시 인자로 기본 타입의 값을 넘길 경우 호출된 함수에 매개변수로 값이 전달이 되고 해당 매개 변수가 함수내에서 변경이 되더라도 실제로 호출된 변수의 값은 변하지 않는다.
반면에
참조타입의 경우 참조에 의한 호출 call by reference 방식으로 동작한다.
참조타입의 객체가 함수 호출로 전달될 경우 프로퍼티 값이 함수의 매개변수로 복사되는것이 아니라 참조값이 그대로 함수 내부로 전달되기 때문에 실제 객체 값도 변경할 수 있게 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
var a = 100;
var objA = { value: 100 };
function changeArg(num, obj) {
num = 200;
obj.value = 200;
console.log(num); //200
console.log(obj); //{ value: 200 }
}
changeArg(a,objA);
console.log(a); //100
console.log(objA); //{ value: 200 }
}
|
cs |
'Language > JAVASCRIPT' 카테고리의 다른 글
[JAVASCRIPT] 데이터타입-배열(2) (0) | 2020.10.23 |
---|---|
[JAVASCRIPT] 데이터타입-배열 (0) | 2020.10.21 |
[JAVASCRIPT] 프로토타입 (0) | 2020.10.20 |
[JAVASCRIPT] 데이터 타입-기본타입&참조타입(객체 프로퍼티) (1) | 2020.10.20 |
[JAVASCRIPT]자바스크립트란? (0) | 2020.10.19 |
댓글