본문 바로가기

Development/WebApp

[Flex] StringUtil.substitude() 사용법

Java의 String.format()과 같은 함수는 Flex에서 StringUtil.substitude()가 있다. 먼저 substitude() 함수를 사용하지 않고 +(플러스) 연산자를 이용하여 구성할 때 코드를 보자.

var index :int = -1;
var length :int = 10;
Alert.show( "Index '" + index + "' specified is out of bounds.(length:" + totalObjSum + ")" );

다음은 substitude() 함수를 사용할 때의 코드이다.

var index :int = -1;
var length :int = 10;
Alert.show( StringUtil.substitute( "Index '{0}' specified is out of bounds.(length:{1})", index, totalObjSum ) );

String 값 중 다른 변수가 들어갈 자리에 {0} ~ {N} 을 쓰고 나서 함수 파라미터로 해당 변수를 순서대로 넣어주면 된다.


속도는?

사실 속도는 + 연산자를 사용하는 게 훨씬 더 빠르다. 다음 코드를 실행해보자.

var startDate :Date = new Date();
for( var i:int=0; i<100000; i++ ) {
	StringUtil.substitute( "Index '{0}' specified is out of bounds.( length : {1} )", 0, 10 );
}
var endDate :Date = new Date();
			
var startDate2 :Date = new Date();
for( var i:int=0; i<100000; i++ ) {
	StringUtil.substitute( "Index '" + 0 + "' specified is out of bounds.( length : " + 10 + " )" );
}
var endDate2 :Date = new Date();

Alert.show( "substitude(100000) : " + ( endDate.getTime() - startDate.getTime() ) + "\n" +
	"+(100000) : " + ( endDate2.getTime() - startDate2.getTime() )
);

결과는 다음과 같다.

결론

가독성이 중요하고 반복적이지 않는 작업에서는 substitude() 함수를 사용해도 괜찮으나 반복적이고 가독성이 필요 없는 곳에서는 + 연산자를 이용하여 속도를 높이는 게 좋을 것 같다.(사실 가독성이 중요하지 않는 코드는 없지만 속도의 중요성이 더 높을 땐 가독성을 낮춰서 타협을 해야 한다.) 참고로 concat 함수는 +연산자보다 느리다. 게다가 가독성도 좋지 않으니 사용하지 않는 것이 좋다.(Java도 마찬가지)