Java에서 StringBuilder로 문자열 처리 속도개선!

개발/안드로이드 2017. 11. 14. 08:00
반응형
Java에서 String 처리시 메모리, 속도 면에서 효율적으로 사용할 수 있는 StringBuilder 에 대해 설명을 해보려고 합니다.
사실 여러 언어를 접하다보니 까먹는것도 있고 하여 기억안날때 슬쩍슬쩍 보려고 하는 것이지요 ^^*

1.  StringBuilder 와 String 의 차이점
String 은  문자열을 대표하는 객체로 문자열 조작으로 유용하게 사용하게 사용하고 있습니다.  그러나 문자열 연산이 많은 경우 성능이 좋지 않습니다.

StringBuilder은 String과 달리 문자열 연산 등으로 공간이 늘어나 공간이 부족하게 되면 버퍼를 늘려 유연하게 동작을 하게 됩니다. String 보다 속도가 좋다는 장점이 있습니다. 
그러나 아무래도 String보다 간편하게 쓰지는 못하겠죠..

※ 문자열 연산이란? 자바에서 문자열을 합칠때 +로 문자열을 합치는데 이러한 방식을 문자열 연산이라고 합니다. 즉, “문자”+”열” 이런식으로 문자열을 합쳐사용하는 것을 문자열 연산입니다.

2. 사용 방법

사용방법은 어렵지 않기때문에 간단하게 살펴보겠습니다.


1
2
3
4
5
6
StringBuilder str = new StringBuilder();
str.append("문자");
str.append("열");
// ==>> str = "문자열"
str.setLength(0);
//=>> str = ""
cs


문자열 연산처리는 2,3 째줄처럼 append로 사용합니다.

5 번째 줄은 문자열을 비우는 코드입니다. 



3. 속도 측정
String, StringBuilder는 문자열 연산시 어느정도 속도가 차이가 날까요?

속도 차이를 알아야 String, StringBuilder를 상황에 따라 사용하겠죠? 이건 제가 테스트한건 아니구요 다른 블로그에 잘설명된게 있어서 링크로 대신할께요.

http://egloos.zum.com/deblan2/v/419830



4. StringBuilder, StringBuffer 
StringBuffer도 있으며 StringBuilder과 사용법이 동일합니다. 그러면 둘의 차이점은 무엇일까요?
차이점은 간단하게 멀티스레드 환경에서 동기화 지원여부입니다. 
StringBuffer 는 각 메소드에 Synchronized Keyword가 존재합니다. Synchronized Keyword가 존재하므로 멀티스레드 상태에서 동기화가 지원된다는 것이죠. 

간단하게 코드로 차이점을 볼께요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public final class StringBuffer
    public synchronized StringBuffer append(String str) {
        super.append(str);
        return this;
    }
 
    ...
}

public final class StringBuilder {
    public StringBuilder append(String str) {
        super.append(str);
        return this;
    }
 
    ...
}
cs


즉, 멀티 스레드에서는 StringBuffer를 사용하시면 되고, 단일 스레드(일반 환경)에서는 StringBuilder, StringBuffer 를 사용하시면 됩니다.









반응형
admin