StringTokenizer

StringTokenizer는 문자열을 지정된 구분자를 기준으로 토큰화하는 Java의 유틸리티 클래스입니다.

 

        String str = "a;b;c;d;e";

        StringTokenizer st = new StringTokenizer(str, ";");
        while (st.hasMoreTokens()) {
            System.out.print(st.nextToken()); // abcde
        }
        
        StringTokenizer st = new StringTokenizer(str, "abc");
        while (st.hasMoreTokens()) {
            System.out.print(st.nextToken()); // de
        }

가령 "a;b;c;d;e" 라는 문자열에서 ";" 문자열로 나누어 토큰화 하고싶다면 위 처럼 사용하는 것입니다.

위와 같은 역할을 수행하는게 split() 메소드인데요 split() 메소는 정규식을 사용하기때문에 활용성이 높고 정규식을 잘 이해하고있다면 더욱 편한게 사실입니다.

그러면 이 StringTokenizer를 왜 사용했을까요? split() 메소드는 내부에서 정규식을 사용하기때문에 StringTokenizer보다 속도가 4배정도 느리다고 합니다. 그래서 속도가 중요한 부분에서 이 StringTokenizer를 사용했었죠. 하지만 현재는 사용하지않는것을 권장하고있습니다. 이 글에서 이 부분에 대해서 알아보겠습니다.

 

 

 

 

Document

JAVA 5 StringTokenizer

JAVA 6 StringTokenizer

JAVA 7 StringTokenizer

JAVA 8 StringTokenizer

JAVA 9 StringTokenizer

JAVA 10 StringTokenizer

JAVA 11 StringTokenizer

JAVA 21 StringTokenizer

 

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

StringTokenizer는 호환성을 이유로 유지되는 레거시 클래스이지만 새 코드에서는 사용이 권장되지 않습니다. 이 기능을 원하는 사람은 대신 String의 split 메서드나 java.util.regex 패키지를 사용하는 것이 좋습니다.

 

문서에는 StringTokenizer는 새 코드에서는 사용하는것을 권장하지 않는다고 작성되어있습니다.

 

StringTokenizer의 주석에도 권장하지 않는다고 하는데 왜 그런지 간단하게 알아보겠습니다.

 

 

 

 

권장하지 않는 이유

 

유연성의 문제

StringTokenizer는 매우 단순한 방식으로 문자열을 분리합니다. 기본적으로 정규 표현식을 지원하지 않기 때문에 복잡한 문자열 처리에는 한계가 있습니다.  split() 메소드나 java.util.regex 패키지를 사용하면 정규표현식을 지원하여 복잡한 구분자를 처리하여 더 유연하고 안정적인 방식으로 문자열을 분리할 수 있습니다. 그러니 StringTokenizer를 사용할 이유가 없어지고 있는 것이지요.

 

 

클래스 개선문제

StringTokenizer는 Java 초기에 도입된 클래스입니다. 이후 자바가 발전하면서 더 나은 기능을 제공하는 클래스들이 도입되면서 StringTokenizer의 사용이유가 더욱 줄어들었습니다. 따라서 새로운 기능이 추가되거나 개선되지 않습니다.

 

제한된 기능

정규표현식을 지원하지않고, 복합한 문자열 처리에 한계가있습니다. 또한 반환 타입이 String[] 같은 배열이 아닙니다.

 

 

 

 

결론

StringTokenizer의 장점도 존재합니다. 정규표현식이 없기때문에 상대적으로 처리속도가 빠릅니다. (split의 약 4배)

그리고 간단한 문자열을 처리하기에는 StringTokenizer를 사용하는것이 더 적합할 수 있습니다.

 

결론은 더 이상 StringTokenizer를 사용하지 말고 split 메소드를 사용하는게 현대적인 방법이라고 생각합니다.

 

+ Recent posts