Development

[JAVA] String VS StringBuilder VS StringBuffer 본문

Languages/JAVA

[JAVA] String VS StringBuilder VS StringBuffer

yo~og 2022. 7. 20. 10:22
반응형

String VS StringBuilder/StringBuffer

 

String과 StringBuilder/StringBuffer 클래스의 가장 큰 차이점은 String은 불변의 속성을 가진다는 점이다.

 

String은 .concat(값) or +"값"을 사용할 수 있다.

하지만 String은 불변하기 때문에 값을 변경할 수 없어 기존 String에 들어있던 값을 버리고 새로 값을 할당하는 것이다.

그렇기 때문에 concat , +를 사용할 때 속도가 느려진다.

 

StringBuilder, StringBuffer는 String과 문자열을 더할 때 객체를 생성하는 것이 아니라 기존의 데이터에 더하는 방식을 사용하기 때문에 속도도 빠르며 상대적으로 부하가 적다.

 

 


 

그렇다면 StringBuilder와 StringBuffer 둘 중에 무엇을 사용해야할까?

 

StringBuilder VS StringBuffer

 

가장 큰 차이점은 동기화의 유무이다. StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다. ( String도 불변성을 가지기 때문에 멀티쓰레드 환경에서의 안정성을 가지고 있다.)

 

StringBuffer는 공통메소드가 동기화되므로 멀티 쓰레드 환경에서는 StringBuffer를 사용하는 것이 안전하고 그 외에는 StringBuilder가 성능이 뛰어나 StringBuilder를 사용해주면 된다.

 

따라서 긴 문자열을 더하는 상황이 발생할 경우 StringBuilder를 적극적으로 사용하면 된다.

 

  • String - 문자열 연산이 적음, 멀티쓰레드 환경
  • StringBuffer - 문자열 연산이 많음, 멀티쓰레드 환경
  • StringBuilder - 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우

 

 

 

예제

package test;

import java.util.ArrayList;

public class MainClass {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		ArrayList<String> list = new ArrayList<>();
		list.add("1번 ");
		list.add("2번 ");
		list.add("3번 ");
		list.add("4번 ");
		list.add("5번 ");
	
//		for(int i=0;i<list.size();i++) {
//			sb.append(list.get(i));
//		}
//		
		for(String i:list) {
			sb.append(i);
		}// for문으로 붙이기
		System.out.println(sb); // 1번 2번 3번 4번 5번 
		
		sb.insert(0, "aaa"); // 0번째에 aaa 넣기
		System.out.println(sb); // aaa1번 2번 3번 4번 5번 
		
		sb.delete(2, 5); // 2~5 삭제
		System.out.println(sb); // aa 2번 3번 4번 5번 
		
		System.out.println(sb.indexOf("2")); // 위치 반환 -> 3
		
		System.out.println(sb.substring(4,7)); // 4~7 자르기 -> 번 3
		System.out.println(sb.length()); // 길이 -> 15
		System.out.println(sb.replace(0, 4, "CCCC")); // 0~4 글자 바꾸기 -> CCCC번 3번 4번 5번 
		System.out.println(sb.reverse()); // 순서뒤집기 -> 번5 번4 번3 번CCCC
	}

}
반응형
Comments