두달만에 쓰는 글 치고는 좀 심심하지만

간만에 팁을 올립니다. ㅎㅎ

무심코 다른 언어 습관때문에 숫자형을 문자형으로 바꿀 때 toString() 을 썼는데

소연이가 toString() 대신에 String() 을 쓰길래

어?

해서 한 번 테스트를 해보았더니

생각보다 꽤 큰 차이를 보이더군요.

일단 테스트 코드갑니다.

var i: int;
var count: int = 100000;

i = count;

var n: Number = 150;
var time: int = getTimer();

while( i-- )
     n.toString();
    
time = getTimer() - time;

trace( time );

i = count;

time = getTimer();

while( i-- )
     String( n );
    
time = getTimer() - time;

trace( time );

테스트 코드는 위와 같고 제 컴퓨터에서 테스트한 결과들을 보여드리겠습니다.

var n: Number = 150
toString()    43ms
String()    32ms (34% faster)

var n: Number = 49394929
toString()    51ms
String()    36ms (41% faster)

var n: Number = 23.20154
toString()    231ms
String()    221ms (4.5% faster)

var n: Number = -1548
toString()    45ms
String()    34ms (32% faster)

var n: Number = NaN
toString()    29ms
String()    17ms (70% faster)

var n: int  = 1823422;
toString()    54ms
String()    35ms (54% faster)

var n: int  = -3422;
toString()    52ms
String()    33ms (57% faster)

var n: uint  = 548422;
toString()    53ms
String()    34ms (55% faster)

오옷!!!

전체적으로 String()이 약 20~50% 빠른걸 알 수 있습니다.

도대체 toString() 내부와 String() 내부는 어떻게 다르기에 이렇게 다른걸까요?

흠...

어쨌든 앞으로는 String() ㄱㄱ
저작자 표시 비영리 동일 조건 변경 허락
신고
  1. Favicon of http://blog.nanjangpan.org/ 하늘아래 2010.11.09 17:32 신고

    음... 진수변환 같은게 더 들어있어서 그런 것 아닐까요?

  2. 웅스 2010.11.09 18:20 신고

    지금까지 toString 말고 String() 으로 작업하고 있었는데, 그게 좋은거였나봐요 으흐흐..
    언제나 야꼬님의 글 감사하게 보구 가요^^/

  3. 뽀루꾸 2010.11.09 18:42 신고

    앗..나도 toString로 사용햇는데...흐미;;

  4. Favicon of http://blog.chanik.com 찬익 2010.11.10 07:31 신고

    커스텀 클래스의 경우, toString()은 각 클래스마다 구현해야 동작해서 좀 귀찮기도 해요. 반면 (개인적으로는) String()에 비해 좀 더 잘 읽히기 때문에 아직까지는 주로 toString()을 쓰고 있어요.
    반면 Number 클래스의 경우에는 타 언어에서도 가끔 String()과 같이 캐스팅해서 쓰는 경우가 있어서 그런지, String()을 더 자주 쓰게 되네요.

  5. 메타콰이어 2010.11.11 21:32 신고

    엌..... toString() 이 더 좋은줄 알고 대부분의 소스를 toString() 으로 했는데

  6. Favicon of http://imincheol.net/bitwizard 이민철 2010.11.18 23:36 신고

    String() 이 빠르군요!
    앞으로 애용해야겠어요 ㅎㅎ

    고맙습니다.

  7. Favicon of http://diebuster.com hika 2010.12.21 23:24 신고

    그러니까 형() 구문은 형치환구문이라고 해서 어셈블리를 까보면 직접 형을 캐스팅하는 걸로 해석이 되어있어.
    반면에 toString()은 말 그대로 메서드를 호출하는 구문이 되어 함수를 실행한 결과를 반환하지.
    오히려 함수호출이 생각보다 부하가 안걸리네! 훌륭한걸 이라고 칭찬해줄 지경 ^^

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2010.12.23 18:51 신고

      아마 속도의 차이는 캐스팅할 때 상속 체인이 아니기 때문에 별도의 프로세스를 거치는데 거기에서 toString()과는 다른 조치를 취하는거 같아여.

      예를 들면 toString()은 갖은 속성을 검사하는데
      상속 체인이 아닌 객체를 캐스팅할 때는 걍 값만 갖고 와서 넣어버린다던가 하는게 아닌가 싶네요.

      아 뜯어보고 싶네요 ㅎㅎ

  8. Favicon of http://scaleup.tistory.com 지오아빠^^ 2011.02.17 11:04 신고

    언어를 디자인한 사람의 설계의도를 읽어야 하는 부분 같은데..

    toString은 타입케스팅 용도가 아니라 오브젝트를 설명하는 용도로 설계된거 거든.
    그래서 보통은 toString을 오버라이딩 해서 해당 클래스의 메타데이타를 문자열 형태로 반환하도록 구현하지.

    (Person instance).toString(); // "Name: wooyaggo, Age: 31, Class:World Class!!"

    대강 요런식으로. 무엇을 반환할지는 개발자의 몫!
    Number 클래스의 경우엔 그 구현이 "Numeric Value=>String"의 구현일거고, 이경우엔 잘 맞는 구현이지.

    내 생각엔 toString을 타입 캐스팅 용도로 사용한다면, 애써 설계해서 상속체인 맨 꼭대기에 넣어둔 설계자가 땅을치며 후회할일 같네 ㅋㅋ


    간만에 와서 안부도 안물어보고 참견질 ㅎㅎ

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2011.02.18 15:55 신고

      구혁이?
      오 올만~
      그러게 이야기 듣고 보니까
      플래시에서는 숫자를 문자열로 변환하는게 다른 방법이 없어서 막연하게 사용했었는데
      방법은 같더라도 목적을 제대로 알아야겠네^^
      역시 달라~ 멋져~

+ Recent posts

티스토리 툴바