본문 바로가기

Flex

StringUtil.substitute 사용하기

mx.utils 에는 편하게 사용할 수 있는 api 가 담겨있다.

ObjectUtil.toString 같은 것은 많이 사용하고 꽤나 유용하게 쓰인다.

이 포스트에서 이야기 할 substitute 는 간단하게 이야기 하면 문자열을 치환 해주는 메서드이다.

간단히 코드를 보면 이해가 될것이다.

private var str:String = "select * from TABLE_NAME where userid='{0}' and menuid='{1}'";

private function build():void
{
	var query:String = StringUtil.substitute(str,"rinn","n002");
	trace(query);
	//select * from TABLE_NAME where userid='rinn' and menuid='n002'
}


위코드에서 보듯이 String 값에서 {n} 형식으로 중괄호로 묶여진 것들을 찾아서.
거기에 파라미터로 받은 값을 넣어준다.
n 값에 따라서 파라미터가 순서대로 들어가게 된다.

{0} 에는 첫번째가 {1}에는 두번째가 들어가고 문자열 안에서 등장하는 순서는 상관이 없다.

private var str2:String = "select * from TABLE_NAME where userid='{0}' and menuid=(select menuno from TABLE2 where userid='{0}' and menuid='{1}')";

private function build2():void
{
	var query:String = StringUtil.substitute(str2,"rinn","n002");
	trace(query);
	//select * from TABLE_NAME where userid='rinn' and menuid=(select menuno from TABLE2 where userid='rinn' and menuid='n002')
}


{0} 이 두번 나오면 두번다 파라미터 첫번째 값이 들어가게 되는 것이다.

이 방법의 좋은점은 대상이 되는 문자열을 파일로 저장해놓을 수 있다는 점이다.

기본 쿼리 같은 경우 파일로 저장해놓고 불러다가 치환해서 사용하게 되면.. 테이블 이름정도가 바뀐다거나 하는 것들은 간단하게 파일만 수정하는 것으로도 해결이 된다.

메뉴의 링크 정보를 저장하는 경우에도 편리하다. 권한 정보 같은것에 따라 파라미터가 바뀐다거나 하는 경우에.. 기본 링크 정보를 저장해놓으면 이후에 간단한 것은 컴파일 할 필요없이 수정해 줄수 있다.

사실 쿼리 같은 경우 iBatis 를 쓰는 것이 훨씬 간편하고 다이나믹 하게 쿼리를 생성할 수 있지만. 간단한 httpService 를 사용하는 경우에는 유용할 수 있겠다.

substitute 함수는 간단하게 구현되어있다.

public static function substitute(str:String, ... rest):String
{
    if (str == null) return '';
    
    // Replace all of the parameters in the msg string.
    var len:uint = rest.length;
    var args:Array;
    if (len == 1 && rest[0] is Array)
    {
        args = rest[0] as Array;
        len = args.length;
    }
    else
    {
        args = rest;
    }
    
    for (var i:int = 0; i < len; i++)
    {
        str = str.replace(new RegExp("\\{"+i+"\\}", "g"), args[i]);
    }

    return str;
}


간단하게 받아온 파라미터를 Array로 받고 for문 돌면서 정규식으로 찾아서 바꿔주는 구조이다.
사실 이런것은 필요한 경우에 그냥 만들어서 쓰게 되는데 이미 api 에서 제공하는 것을 귀찮게 만들어 쓸 필요가 있는가!!
그냥 있는 걸 쓰자.. -ㅅ-;

mx.utils 패키지 같은 경우에 간단 간단한 함수로 되어있기 때문에 api 소스를 보는 것 만으로도 초보 개발자에게는 공부가 된다. 결정적으로 그리 어렵지 않다..

시간날때 한번씩 뭐가 있는지 봐놓으면.. 나중에 뻔히 제공되는 메서드를 놔두고.. 개발하는 사태는 벌어지지 않을것이다..
우리는.. 그거 말고도 할일이 많지 않은가.. ㅠㅠ


아.. 주말도 출근 해야 하나.....