본문 바로가기
BackEnd FrontEnd/JAVA

String, StringBuffer

by forkballpitch 2017. 6. 27.
반응형
String, StringBuffer 클래스의 특징

String 자료형은 한 번 값이 생성되면 그 값을 변경할 수 없습니다.
이렇게 값을 변경할 수 없는 객체를 immutable 객체라고 부릅니다.
즉, trim, toUpperCase 등 메소드를 보면 문자열이 변경되는 것으로 보일 수 있으나 해당 메소드 수행 시 또 다른 String 객체를 생성하여 return합니다.

이에 반해, StringBuffer 클래스는 반대로 값을 변경할 수 있는 mutable 객체입니다.
한번 생성된 값을 언제든지 수정이 가능 합니다.
 

String, StringBuffer 성능 비교

String  <  StringBuffer 

위에서 말씀드렸듯이, String 객체는 변경이 있을 때마다 객체를 새로이 만듭니다.

1
2
3
for(int i = 0 ; i < n; i++){
            str += newStr;
        }
cs

위와 같이 간단한 소스가 있을 때, 
String 객체는 계속해서 str을 새로 갱신하여 newStr의 데이터를 복사하므로
k + 2k + 3k + 4k ……. (k는 문자열의 길이)이므로 O(kn^2) 시간 복잡도가 소요됩니다.
이에 반해, StringBuffer 클래스의 경우 단 한번만 객체를 생성하므로 O(1) 시간 복잡도가 소요 됩니다.

StringBuffer 객체가 항상 옳은가?
그건 상황에 따라 다릅니다. StringBuffer 자료형은 String 자료형보다 무거운 편에 속한다. new StringBuffer() 로 객체를 생성하는 것은 일반 String을 사용하는 것보다 메모리 사용량도 많고 속도도 느립니다. 따라서 문자열 추가나 변경등의 작업이 많을 경우에는 StringBuffer를, 문자열 변경 작업이 거의 없는 경우에는 그냥 String을 사용하는 것이 유리합니다.


StringBuffer 주요 메서드

append(“”) - 문자열 끝에 추가 
insert(i, “”)  - 하나하나 단어의 인덱스 위치에 해당 값을 삽입 
char charAt(i) -  i번째 인덱스에 있는 char를 반환
length() - 길이를 반환
substring(i, j) -  i에서 j까지의 문자열을 반환
int indexOf(str) - str의 문자열의 인덱스 위치를 반환
setChatAt(index, char a); - index의 위치에 a로 변경

참고자료 - https://wikidocs.net/276 (위키독스 - 점프투자바)



출처: http://manducku.tistory.com/35 [Manducku`s Code]

반응형

'BackEnd FrontEnd > JAVA' 카테고리의 다른 글

assert 함수란  (0) 2017.07.03
직렬화(serialization) 역직렬화(deserialization)  (0) 2017.06.30
volatile  (0) 2017.06.29
string 배열 나누기  (0) 2016.11.22
String to int  (0) 2016.11.22