SpringBoot

String, StringBuilder, StringBuffer 사용법 및 차이

pepega 2021. 12. 23. 11:59

String 불변(Immutable)

String text = "Hello World"

text += "!!!!" // Hello World!!!!

 

"Hello World" + "!!!!"

 

내용이 합쳐져서

"Hello World!!!!" 처럼 보일 수 있지만

 

text가 가지고 있는 "Hello World!!!!" 값은

새로운 메모리 영역을 가르키게 된다.

 

처음 선언했던 "Hello World" 로 할당 되어있는 메모리 영역은

Garbage로 남아있다가 GC(Garbage Collection)에 의해 사라지게 된다.

 

String은 불변하기 때문에

문자열을 다시 선언하는 시점에서

새로운 String 인스턴스가 생성된 것이다.

 

https://ifuwanna.tistory.com/221#comment8911546

변하지 않는 문자열을

자주 호출할 경우 String 클래스가 적절할 수 있으나

 

문자열 추가, 삭제, 수정 등의 연산이 자주 일어나는 알고리즘에

String 클래스를 사용하면 

 

힙 메모리(Heap)에 많은 임시 가비지(Garbage)가 생성되어 힙메모리 부족으로

성능상 영향을 미칠 수 있다.

 

 

 

StringBuilder 가변(Mutable)

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

 

StringBuilder (Java Platform SE 7 )

Inserts the string into this character sequence. The characters of the String argument are inserted, in order, into this sequence at the indicated offset, moving up any characters originally above that position and increasing the length of this sequence by

docs.oracle.com

StringBuilder text = new StringBuilder();

text.append("Hello");
text.append(" World!"); //Hello World!

메소드 종류

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html

 

StringBuilder (Java Platform SE 7 )

Inserts the string into this character sequence. The characters of the String argument are inserted, in order, into this sequence at the indicated offset, moving up any characters originally above that position and increasing the length of this sequence by

docs.oracle.com

동기화를 지원하지 않음

 

동기화를 고려하지 않기 때문에

단일 쓰레드에서는 성능이 좋음

 

 

 

 

StringBuffer 가변(Mutable)

https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html

 

StringBuffer (Java Platform SE 7 )

Inserts the string into this character sequence. The characters of the String argument are inserted, in order, into this sequence at the indicated offset, moving up any characters originally above that position and increasing the length of this sequence by

docs.oracle.com

StringBuffer text = new StringBuffer();

text.append("Hello");
text.append(" World!"); //Hello World!

 

동기화 키워드를 지원

멀티쓰레드 환경에서 안전(thread-safe)

 

동기화를 고려하기 때문에

상대적으로 성능이 떨어질 수 있음

 

String도 불변성을 가지기 때문에

멀티쓰레드 환경에서 안전하다.

 

 

 

 

https://ifuwanna.tistory.com/221#comment8911546

 

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

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

ifuwanna.tistory.com