You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
그러나 가장 큰 단점이 있다. 바로 문자열 연결 연산자로 문자열 N개를 잇는 시간은 N^2에 비례한다는 것이다.
즉, 엄청나게 느리다는 뜻이다.
그 이유는 문자열(String)은 불변이다. 불변인 문자열을 연결하기 위해서는 양쪽의 내용을 복사해 새로운 문자열을 만들어야 하기 때문이다.
StringBuilder vs StringBuffer
String은 불변이기 때문에 가변을 지원하는 StringBuilder와 StringBuffer를 제공해준다.
StringBuilder
빌더패턴을 이용해 String을 처리한다고 생각하면 좋을거 같습니다.(그러나 해당 StringBuilder가 빌더 패턴을 사용한거지에 대한 논란은 있습니다.)
StringBuffer에 비해 Thread-Safe 하지 않지만, 싱글쓰레드 환경에서는 연산처리가 굉장히 빠르다.
StringBuffer
StringBuilder와 기능을 똑같지만, 멀티쓰레드 환경을 고려해 synchronized 키워드를 사용해 동기화를 할 수 있다. 즉, Thread-Safe한 객체이다.
cf) String.join
publicstaticStringjoin(CharSequencedelimiter, CharSequence... elements) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(elements);
// Number of elements not likely worth Arrays.stream overhead.StringJoinerjoiner = newStringJoiner(delimiter);
for (CharSequencecs: elements) {
joiner.add(cs);
}
returnjoiner.toString();
}
StringJoiner를 사용하는데 아래 코드와 같이 구획문자(Delimiter), prefix와 Suffix가 있다.
StringBuilder와 비슷하게 동작하지만, 구분자 넣는 기능이 추가되었다고 생각하면 된다.