티스토리 뷰

액션스크립트 3.0(ActionScript 3.0)에서는 기본적으로 객체는 참조(Reference)로 값을 받게 됩니다. 그래서 이점을 간과하면 예상치 못한 결과를 얻게 되죠!

아래의 예에서, 배열 A 에 B 를 넣고, 배열 B 에 새로운 값을 추가했는데 배열 A 도 변화가 된걸 알 수 있습니다. 이것이 배열 B 가 배열 A 를 참조하고 있기 때문이죠.

var A:Array = new Array();
    A.push(1);

var B:Array;
    B = A;
    B.push(2);

trace(A);// 결과: 1, 2
trace(B);// 결과: 1, 2

이런 문제 때문에 객체(Object)의 경우 따로 clone() 함수를 만들어서 쓰기도 하는데, 배열의 경우엔 따로 함수를 만들지 않고도 concat() 함수를 쓰면 간단하게 클론을 만든것과 같은 결과를 얻을 수 있습니다. (concat() 함수는 이미 Array 객체의 기본 메소드로 지원하고 있습니다.)

var A:Array = new Array();
    A.push(1);

var B:Array;
    B = A.concat();// .concat() 메소드 호출
    B.push(2);

trace(A);// 결과: 1
trace(B);// 결과: 1, 2

concat() 메소드는 인자로 받은 배열을 합쳐 새로운 배열로 만들어 주는데, concat() 메소드에 아무런 인자를 주지 않게 되면 클론을 만든것과 같은 결과를 얻을 수 있습니다. :)
[fin.]



참고 사이트
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함