StringBuilder란?

2024. 4. 20. 20:12java

1. StringBuilder의 탄생 배경

 String형 객체 s1과 s2라는 객체가 있으면, s1+s2를 실행하면, 새로운 string을 생성한다. 이런 과정이 반복되면, 메모리에 안 좋은 문제를 야기한다. 그래서 나온 것이 StringBuilder와 StringBuffer다.

2.StringBuilder란?

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

3. StringBuilder와 StringBuffer의 차이

string 객체는 한번 값이 할당 되면 그 공간은 변하지 않습니다. 하지만, Stringbuilder StringBuffer 객체는 한번 값이 할당되더라도 한번 더 다른 값이 할당되면 할당된 공간이 변하는 특성을 갖고 있습니다.

 

 

 

그래서,

StringBuilder 단일 스레드 환경 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우이므로,

즉, 속도면에선 StringBuffer 보다 성능이 좋습니다.

StringBuffer 는 멀티 스레드 환경 문자열의 추가, 수정, 삭제 등이 빈번히 발생하는 경우 이므로

즉, StringBuffer 는 멀티 스레드 환경에서도 안전하게 동작할 수 있습니다.

 

실제로, 백준 문제를 StringBuilder와 StringBuffer를 이용해서 문제를 풀었습니다.

위에 것이 StringBuffer고, 아래 것이 StringBuilder입니다. 

위 아래와의 시간 차이가 많이 나는 것을 볼 수 있습니다.

StringBuffer(위)와 StringBuilder(아래)의 차이

 

4.StringBuffer 사용법

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
StringBuffer s = new StringBuffer();

s.append(string);
s.append("??!");

System.out.println(s);

 

 

5. StringBuilder 사용법

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string = br.readLine();
StringBuilder sb = new StringBuilder();
sb.append(string);
sb.append("??!");
System.out.println(sb);

이 코드를 실행하면 입력 받은 문장(문자열)과 ??!가 합쳐집니다.

 

두 코드 모두 똑같은 실행 결과를 출력합니다.

 

코드 실행 결과

6.참고 문서

 

https://velog.io/@rara_kim/Java-StringBuilder-%EC%82%AC%EC%9A%A9%EB%B2%95

 

[Java] StringBuilder 사용법

String은 소위 불변(imuutable)객체라고 한다.  즉, String 객체는 한번 생성되면 변경할 수 없다. \+ 연산자를 사용하여 문자열을 열결할 수 있으나,연결할 때마다 새로운 문자열 객체가 생성되고 이전

velog.io

https://velog.io/@heoseungyeon/StringBuilder%EC%99%80-StringBuffer%EB%8A%94-%EB%AC%B4%EC%8A%A8-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EC%9E%88%EB%8A%94%EA%B0%80

 

StringBuilder와 StringBuffer는 무슨 차이가 있는가?

Java에서 String 클래스는 불변성을 갖습니다. 그래서 변하지 않는 문자열을 자주 사용하는 경우엔 좋은 성능을 기대할 수 있습니다. 하지만 문자열에 대한 변경이 자주 일어나는 프로그램에서 Stri

velog.io

 

'java' 카테고리의 다른 글

hasnext()란? - [java]  (0) 2024.04.24
(JAVA) BufferedWriter  (0) 2024.04.24
java Math 클래스  (0) 2024.04.19
BufferReader와 Scanner의 차이  (0) 2024.04.18
(java) charAt란?  (0) 2024.04.15