상상 너머 그 무언가...

Array보다 성능이 좋다는 Vector를 사용해보자 본문

개발관련(Development)/플래시(Flash)

Array보다 성능이 좋다는 Vector를 사용해보자

Clack 2013. 11. 5. 11:30

배열은 배열의 요소로 여러가지 자료형을 넣을 수 있는데

백터는 연속된 요소들의 자료형이 모두 같아야 한다.


연속된 요소들의 자료형이 모두 같아서 요소들의 메모리 영역도 일정하기 때문에 읽기 쓰기가 빠르다.

배열은 각 요소의 자료형에 따라 다른 메모리 크기를 차지 하기 때문에 특정 index의 요소에 해당하는 메모리 영역에 접근하기 위해서는 해당 메모리의 주소값을 찾는 연산이 추가로 들게된다.


// 백터 선언

var myVector: Vector.<String>;


// 백터 생성

myVector = new Vector.<String>;


// 백터 뒤에서 삽입

myVector.push( "액션스크립트");

myVector.push( "3.0" );


// 백터 앞에서 삽입

myVector.unshift( "플래시" );

trace( myVector.join() );



// 백터 뒤에서 추출

var popString: String = myVector.pop();

trace( "popString = ", popString );

trace( myVector.join() );


// 백터 앞에서 추출

var shiftString: String = myVector.shift();

trace( "shiftString = ", shiftString );

trace( myVector.join() );



// 백터 내부 자료형 속성에 바로 접근

var obj: Object = new Object();

obj.name = "ko";

obj.age = 33;


var objVector: Vector.<Object>;

objVector = new Vector.<Object>;

objVector.push( obj );

trace( objVector[ 0 ].age );



// 함수 리턴 자료형으로 백터 사용

function getVector(): Vector.<Object>

{

var returnVector: Vector.<Object>;

returnVector = new Vector.<Object>;

for( var i: int = 0; i < 10; i++ )

{

var obj: Object = new Object();

obj.name = "ko" + i;

obj.age = 33 + i;

returnVector.push( obj );

}

return returnVector;

}

trace( getVector()[ 3 ].age );



// 함수 파라미터로 백터 입력

function setVector( _vec: Vector.<Object> ): void

{

var vecLength: int = _vec.length;

trace( _vec[ vecLength - 1 ].name );

}

setVector( getVector() );



// 백터 선언과 동시에 생성

var directVector: Vector.<Object> = new Vector.<Object>;

directVector[ 0 ] = new Object();

directVector[ 0 ].age = 19;


trace( directVector[ 0 ].age );



// 백터 직접 입력하여 생성

var writeVector: Vector.<String>;

writeVector = new <String>[ "학교", "종이", "땡땡땡" ];

trace( writeVector[ 2 ] );


var writeVector2: Vector.<Object>;

writeVector2 = new <Object>[{ name:"클락", age:33 }, { name:"슈퍼맨", age:300 }];

trace( writeVector2[ 1 ].name );


if( writeVector2.length <= 2 )

{

writeVector2[ 2 ] = new Object();

writeVector2[ 2 ].name = "백터";

}

trace( writeVector2[ 2 ].name );



// 2차 백터 

var vector2d: Vector.< Vector.<int> >;

vector2d= new <Vector.<int>>[ new <int>[0,0], new <int>[0,-1], new <int>[0,1] ];

trace( vector2d[ 1 ] );


백터 사용시 주의점은 배열과 달리 연속적으로 요소들이 존재해야한다.

즉 myVector[ 2 ] 가 없다면 myVector[ 3 ]은 생성도, 접근도 할 수 없다.

백터의 요소 범위에 속하지 않는 요소에는 접근할 수 없다. ( 배열은 null값을 가지지만 백터는 오류가 발생한다. )