본문 바로가기

알고리즘/공부의흔적

[공부의흔적]_StringBuilder

자바에서 문자열 하면 String을 대게 많이 떠올릴 것이다.

그런데 이 문자열이 1개 이상 있어서 이것들을 더해야 한다고 하면 어떤 방법을 사용할 수 있을지 알아보자.

간단하게는 아래처럼 사용할 것이다.

public class Example {
	public static void main(String[] args) {
		String str1 = "프로그래밍 - ";
		String java = "자바";
		String android = "안드로이드";
		String result = java + android;
		str1 += java += android;
		System.out.println(result);
		System.out.println(str1);
	}
}

하지만 String 객체끼리 더하는 방법은 메모리 할당과 해제를 발생시키는데, 덧셈 연산이 많아진다면 성능적으로 좋지 않다. 예를 들어 100만 개의 문자열을 연결해야 하는 상황이라고 가정하면 100만 개의 문자열을 추가로 생성하고 연결하는 작업을 할 때, 기존 문자열 값의 길이에 추가된 문자열의 크기를 더한 크기의 새로운 문자열이 생성된다. 이것을 100만 번 수행되니 메모리를 많이 잡아먹게 되는 상황이 생긴다.

그래서 이러한 일들로 인해 StringBuilder에 대해 설명하고자 한다.

String은 변경 불가능한 문자열을 생성하지만 StringBuilder는 변경 가능한 문자열을 만들어주므로, String을 합치는 작업 시 하나의 대안이 될 수 있다. 사용법은 아래와 같다.

public class Example {
	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		sb.append("문자열 ").append("연결");
		//String str = sb;	// String에 sb를 그대로 넣는건 불가능
		String str = sb.toString();
		
		// 결과를 출력하면 str이랑 sb는 같은 값을 출력한다
		// 문자열 연결
		System.out.println(str);
		System.out.println(sb);
	}
}
import java.util.ArrayList;

public class Example {
	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder();
		
		// 배열도 가능
		ArrayList<String> list = new ArrayList<String>();
		list.add("첫 번째, ");
		list.add("두 번째, ");
		list.add("세 번째, ");
		list.add("네 번째, ");
		list.add("다섯 번째");
		
		for(int i=0; i<list.size(); i++) {
			sb.append(list.get(i));
		}
		System.out.println(sb);
	}
}

// 첫 번째, 두 번째, 세 번째, 네 번째, 다섯 번째