본문 바로가기

UI개발

자바스크립트 참조 (reference)

참조는 객체의 실제 위치를 가리키는 포인터.

자바스크립트에서 실제 객체 그 자체는 절대로 참조가 될 수 없다.


문자열은 항상 문자열이고 

배열은 항상 배열이다.

그렇지만 서로 다른 변수들이 동일한 객체를 가리킬 수 있다.


자바스크립트는 이렇게 참조들로 구성된 구조에 기반하고 있다.


동일한 객체를 가리키는 여러 변수들에 대한 예


// obj를 빈 객체로 설정

var obj = new Object();


// objRef는 앞의 빈 객체를 가리킨다.

var objRef = obj;


// 앞에서 생성했던 객체의 프로퍼티를 수정한다.

obj.oneProperty = true;


// 두 변수 모두 동일한 객체를 가리키고 있기 때문에 수정 사항이 두 변수에 모두 나타남.

alert( obj.oneProperty == objRef.oneProperty );



배열 객체는 push() 메서드로 새로운 아이템을 추가할 수 있다.



스스로를 수정할 수 있는 객체에 대한 예


// 아이템 배열을 생성한다.

var items = new Array( "one", "two", "three" );


// 아이템 배열에 대한 참조를 하나 생성

var itemsRef = items;


// 원본 배열에 아이템을 하나 추가.

items.push( "four" );


// 두 변수가 동일한 배열 객체를 가리키기 때문에 배열의 크기가 같아야 한다.

alert( items.length == itemsRef.length );


참조는 최종적으로 참조되는 객체를 가리키며, 참조 자체를 가리키지 않는다.



원래 객체는 그대로 두고 한 객체의 참조를 변경


// items가 문자열 배열을 가리키게 한다.

var items = new Array( "one", "two", "three" );


// itemsRef가 items 참조를 가리키게 한다.

var itmesRef = items;


// items가 새로운 객체를 가리키게 한다.

var items = new Array("new", "array");


// items와 itemsRef는 이제 서로 다른 객체를 가리킨다.

// items는 new Array("new", "array")를 가리키고

// itemsRef는 new Array("one", "two", "three")를 가리킨다.



내용을 수정할 수 없는 새로운 객체를 만드는 객체 수정에 대한 예


// item이 새로운 문자열 객체를 가리키게 한다.

var item = "test";


// itemRef는 이제 동일한 문자열 객체를 가리킨다.

var itemRef = item;


// 문자열 객체에 새로운 텍스트를 이어붙인다.

// 이렇게 하면 원본 객체를 수정하지 않고 새로운 객체를 만든다.

item += "ing";


// 완전히 새로운 객체를 생성했기 때문에 item과 itemRef는 서로 다르다.