[Javascript]01-3. 참조 타입의 특성

Elen li·2021년 10월 26일
0
post-thumbnail

1. 참조타입의 특성

  • 참조 타입 (배열, 메소드)
  • 객체의 모든 연산이 실제 값이 아닌 참조값으로 처리됩니다.
var objA = {
  val : 40
};
var objB = objA;

console.log(objA.val);
console.log(objB.val);

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

// 출력값
40
40
50
50

2. 객체 비교

  • 동등 연산자 (==)를 사용하여 두 객체를 비교합니다.
  • 이 때에도, 객체의 참조값을 비교합니다.
//객체 비교
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
  • a와 b는 기본 타입(number)의 변수입니다. 기본 타입의 경우 동등 연산자를 사용해서 비교할 때 ‘값’을 비교합니다. 그러므로 a == b의 결과는 true가 됩니다.

3. 참조에 의한 함수 호출 방식

  • 기본 타입: 값에 의한 호출 (call by value)
    : 함수를 호출할 때 인자로 기본 타입의 값을 넘길 경우, 호출된 함수의 매개 변수로 ‘복사된 값’이 전달
    : 즉, 함수 내부에서 매개변수를 이용해 값을 변경해도, 실제로 호출된 변수의 값이 변경되지는 않음
  • 참조 타입: 참조에 의한 호출(call by reference)
    : 함수를 호출할 때 인자로 기본 타입의 값을 넘길 경우, 인자로 넘긴 객체의 참조값이 그대로 함수 내부로 전달
    : 함수 내부에서 참조값을 이용해서 인자로 넘긴 실제 객체의 값을 변경할 수 있음
//callByValue vs callByReference
var a = 100;
var objA = { value : 100};

function changeArg(num, obj) {
  num = 200;
  obj.value = 200;

  console.log(num);
  console.log(obj);
}

changeArg(a, objA);

console.log(a);
console.log(objA);

// 출력값
200
{ value : 200 }
100
{ value : 200 }
  1. 프로토타입
  • 자바스크립트의 모든 객체는 자신의 부모 역할을 하는 객체와 연결되어 있습니다.
  • 객체지향의 상속 개념과 같이 부모 객체의 프로퍼티를 자신의 것처럼 쓸 수 있는 특징이 있습니다.
  • 이러한 부모 객체를 프로토타입 객체 (또는 프로토타입)라고 부릅니다.
  • 모든 객체의 프로토타입은 자바스크립트의 룰에 따라 객체를 생성할 때 결정됩니다. 프로토타입 체이닝
  • toString(), valueOf() 등과 같은 모든 객체에서 호출 가능한 자바스크립트 기본 내장 메서드가 포함되어있습니다.
//프로토타입
var foo = {
  name: 'foo',
  age: 30
};

console.log(foo.toString());
console.dir(foo);

// 출력값
[object Object]
{ age :  30, name : “foo” }
  • 자바스크립트의 모든 객체는 자신의 프로토타입을 가리키는 [[Prototype]]라는 숨겨진 프로퍼티를 가집니다.
  • 크롬 브라우저에서 proto가 [[Prototype]]을 의미합니다.
  • 즉, foo 객체는 자신의 부모 객체를 proto라는 내부 프로퍼티로 연결하고 있는 것입니다.
profile
Android, Flutter 앱 개발자입니다.

0개의 댓글