String과 StringBuffer/StringBuilder의 차이를 간단하게 알아보자.
이들의 가장 큰 차이점은, String은 불변 속성을 갖고, StringBuffer/StringBuilder는 그렇지 않다는 것이다.

String은 내부 문자열을 수정할 수 없다. 다음 코드를 보면 다른 문자열에 결합해서 내부 문자열을 변경하는 것처럼 보이지만 사실 'ABCDEF'라는 새로운 String 객체를 생성하는 것이다. 그리고 data변수는 새로 생성된 String 객체를 참조하게 된다.

String data = "ABC";
data += "DEF";


출처 : 이것이 자바다

문자열 + 연산의 새로운 String 객체가 생성되고 이전 객체는 계속 버려지는 것(가비지 컬렉터로 들어간다.)이기 때문에 효율성이 좋다고는 볼 수 없다. 잦은 문자열 변경 작업을 해야한다면 String보다는 StringBuilder를 사용하는 것이 좋다.
StringBuilder는 내부 버퍼(데이터를 저장하는 메모리)에 문자열을 저장해두고 그 안에서 추가, 수정, 작제 작업을 하도록 설계되어 있다. 따라서 String처럼 새로운 객체를 만들지 않고도 문자열을 조작할 수 있다.

StringBuilder 조작 메소드

리턴 타입메소드(매개변수)설명
StringBuilderappend(기본값 / 문자열)문자열을 끝에 추가
StringBuilderinsert(위치,기본값 / 문자열)문자열을 지정 위치에 추가
StringBuilderdelete(시작 위치, 끝 위치)문자열 일부를 삭제
StringBuilderreplace(시작 위치, 끝 위치, 문자열)문자열 일부를 대체
StringBuilderreverse()순서를 뒤집음
StringBuildersetCharAt(int index, ahcr ch)주어진 문자를 치환
StringBuilderindexOf(String s)값이 어느 인덱스에 들어있는지 확인
StringBuildersubString(int start,int end)start와 end 사이의 값을 잘라옴.
StringtoString()완성된 문자열을 리턴

코드 예시 :

StringBuilder sb=new StringBuilder();
	sb.append("DEF");
	sb.insert(0,"ABC");
	sb.delete(3,4);
	sb.toString();
	System.out.println(sb);

결과 :

ABCEF

추가로 메소드 체이닝 (method chaining) 패턴을 이용할 수 있다. 아래처럼 사용하는 것이 메소드 체이닝 패턴이다

String str=new StringBuilder()
	.append("DEF")
	.insert(0,"ABC")
	.delete(3,4)
	.toString();
System.out.println(str);

결과 :

ABCEF

정리

StringBuilder는 문자열의 연산이 자주 일어나는 단일 쓰레드 환경에서 사용하는 것이 유리하다.

profile
java를 잡아...... 하... 이게 맞나...

0개의 댓글