String, StringBuffer, StringBuilder 클래스는 문자열을 처리한다.

연산이 많은 경우에 성능만 놓고 비교한다면, StringBuilder > StringBuffer >>> String 순으로 성능이 좋다.



String vs StringBuffer & StringBuilder

String은 immutable(불변)하다. immutable이란, 수정할 수 없다는 뜻이다.

String은 한 번 생성되면 할당된 메모리가 고정이다.

+ 연산자나 concat() 을 통해 문자열을 붙여도 기존 문자열에 새로운 문자열을 붙이는 것이 아니라,

새로운 String을 만든 후 연결된 문자열을 저장하고 기존의 String이 새로운 String을 참조한다.

String 객체는 편리하고 동기화를 신경쓰지 않아도 되지만, 문자열 연산이 많은 경우에는 성능이 좋지 않다.


StringBuffer과 StringBuilder는 mutable하다.

문자열 연산 등으로 기존 객체의 공간이 부족하게 되는 경우 버퍼 크기를 늘리며 유연하게 동작한다. 



StringBuffer vs StringBuilder

두 클래스가 제공하는 메서드는 서로 동일하나, 멀티 쓰레드 상태에서 동기화 지원 여부가 다르다.

StringBuffer는 각 메소드에 synchronized 키워드가 있어 동기화를 지원하는 반면, StringBuilder는 동기화를 보장하지 않는다.

단일 스레드 환경에서는 동기화 관련 처리로 인해 StringBuffer가 StringBuilder에 비해 성능이 좋지 않다.



StringBuilder 사용방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
StringBuidler sb = new StringBuilder(String str);    // 객체 정의
String toString()    // StringBuilder 객체를 string 형으로 전환
 
StringBuilder append(String str)    // 문자열 추가
StringBuilder insert(int offset, String str)    // 문자열 삽입
StringBuilder delete(int start, int end)    // 문자열 삭제
StringBuilder replace(int start, int end, String str)    // 문자열 교체
 
 
StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb);        // Hello    
        
sb.append(" World!");        // " World!" 추가
System.out.println(sb);        // Hello World!
        
sb.insert(5", Java");        // 5번째 위치에 ", Java" 삽입
System.out.println(sb);        // Hello, Java World!
        
sb.delete(511);            // 5번째 위치부터 11번째 위치 전까지 문자열 삭제
System.out.println(sb);        // Hello World!
        
sb.replace(04"G");        // 0번째 문자부터 4번째 문자 전까지 "G"으로 교체 
System.out.println(sb);        // Go World!
 
cs




참고 출처

String, StringBuffer, StringBuilder의 차이점과 장단점: https://www.slipp.net/questions/271

String, StringBuffer, StringBuilder 차이: http://12bme.tistory.com/42

'Java' 카테고리의 다른 글

직렬화 (Serialization)  (0) 2018.08.04
Overloading (오버로딩)  (0) 2018.07.28
Overriding (오버라이딩, 재정의)  (0) 2018.07.28
Scanner와 BufferedReader  (0) 2018.07.17
객체(Object), 클래스(Class), 인스턴스(Instance)  (0) 2018.07.16

+ Recent posts