Back-end/Java Language

0. StringBuilder vs. StringBuffer

prden 2021. 7. 4. 19:35

1.String

String은 Immutable 하기 때문에 값을 변경할 수 없다. 따라서. concat()을 이용하여 값을 덧붙일 때 기존 String에 있던 값을 버리고 새로운 값을 할당한다. (concat이나 +를 사용하면 속도가 현저히 느려짐- 힙 메모리에 많은 임시 가비지가 생성되므로 힙 메모리 부족으로 애플리케이션 성능에 영향을 끼친다. )

 

2. StringBuffer, StringBuilder

String과 반대로 StringBuilder, StringBuffer는 가변성을 가지기 때문에 .append(), .delete()등의 api를 이용해서 동일 객체 내에 문자열을 변경하는 것이 가능하다. 

멀티 쓰레드 환경에서 StringBuffer를 사용하여 값이 예상치 못하게 변경되는 것을 방지할 수 있다. (동기화를 지원하기 때문에)

그 이외에는 StringBuilder를 사용해주면 된다. 단일 스레드에서 StringBuilder가 성능면에서 뛰어나기 때문이다.

 

아래는 StringBuilder의 여러 메서드이다.

public static void main(String[] args) {
		
		String s = new String("ABC");
		s = s.concat(" 붙이기");
		s = s + " 붙이기";
		// String은 불변(immutable)하기 때문에
		// 기존 것을 버리고 새로 할당하는 식으로 사용 
		
		StringBuffer sbuffer = new StringBuffer("stbf");
		sbuffer.append(" 붙이기");
		
		StringBuilder sbuilder = new StringBuilder("stbf");
		sbuilder.append(" 붙이기");
		// StringBuffer, StringBuilder는 변하기(mutable)하기 때문에
		// 기존 것에서 append를 사용해서 값 변경 가능
		
		sbuilder.append("붙이기"); // 삽입
		sbuilder.insert(0, "ASDASD"); // 중간에 삽입
		sbuilder.delete(3, 7); // 자르기
		sbuilder.indexOf("ASDB"); // index 확인
		sbuilder.substring(0, 4); // 자르기
		sbuilder.length(); // 길이 확인
		sbuilder.replace(0, 4, "CCCC"); // 글자 바꾸기(0부터 4번째 글자를 날리고 CCCC로 변경)
		
		System.out.println(sbuilder);
		System.out.println(sbuilder.indexOf("붙이기붙이기"));
		System.out.println(sbuilder.substring(0, 4)); // substring 예제
		System.out.println(sbuilder.reverse()); // 순서 뒤집기
		System.out.println(sbuilder.length()); // length 예제

	}

3. 결론

1) String : 문자열 연산이 적고, 멀티쓰레드 환경일 경우

2) StringBuffer : 문자열 연산이 많고 멀티스레드 환경일 경우에

3) StringBuilder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우에

 

https://ifuwanna.tistory.com/221

 

[Java] String, StringBuffer, StringBuilder 차이 및 장단점

Java 에서 문자열을 다루를 대표적인 클래스로 String , StringBuffer, StringBuilder 가 있습니다. 연산이 많지 않을때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 가능성은 거의 없습니다

ifuwanna.tistory.com

 

'Back-end > Java Language' 카테고리의 다른 글

람다식(Lamda expression)  (0) 2021.07.19
Scanner  (0) 2021.07.05
0. BufferedReader, BufferedWriter, Scanner, StirngTockenizer  (0) 2021.07.03
X. GarbageCollection(가비지 컬렉션)  (0) 2021.06.10
입출력(I/O)  (0) 2021.06.07