[AS3] 배열의 카피

Programming/ActionScript 3.0 2007. 6. 16. 15:07
Array 클래스에는 배열의 카피를 작성하는 메소드는 준비되어 있지 않다. 배열의 "shallow copy" 는 concat() 또는 slice() 메소드를 파라미터 없이 호출하는 것으로 작성할 수 있다. shallow copy 에서는 오브젝트인 요소가 원래의 배열에 포함되어 있는 경우 카피한 배열내의 요소는 원래의 요소에 포함되고 있는 오브젝트에의 참조가 되어 참조하는 오브젝트는 카피되지 않는다. 따라서 원본 배열과 카피한 배열이 동일한 오브젝트를 참조하게 되어 한쪽으로부터 변경을 하면 이미 다른 한편에도 그 변경이 반영된다.

"deep copy"는 원의 배열내에서 참조되고 있는 오브젝트를 모두 카피하는 것이다. 그 경우 원본의 배열과 카피한 배열이 동일한 오브젝트를 참조하지 않는다. deep copy를 실행하려면 복수행의 코드를 기술할 필요가 있어 보통 특정한 함수를 작성하게 된다.

다음의 예에서는  deep copy를 실행하기 위해 actionscript에서는 clone() 함수를 정의하고 있다.아래 사용한 알고리즘은 Java 프로그래밍에서 일반적으로 사용되고 있는 방법이다. 우선 원래의 배열을 직렬화해서 ByteArray 클래스의 인스턴스를 작성하고 그것을 새로운 배열에 읽어들이는 것으로 카피를 실행하고 있다. 코드에 나타나고 있는 대로 이 함수는 오브젝트를 받아들이기 위해 인덱스 배열과 결합 배열의 양쪽 모두를 사용하고 있다.

import flash.utils.ByteArray;

function clone(source:Object):*{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}


    

설정

트랙백

댓글