DevJong12

String, StringBuilder, StringBuffer 본문

Java,Spring/Java

String, StringBuilder, StringBuffer

Jong12 2022. 5. 18. 21:20
728x90

과거에 면접을 보면서 이런 기본적인 것조차도 몰라서 면접에서 탈탈털렸던 기억이 있어서

글을 썻던 기억이 있다.

 

근데 다시보니 무슨말인지도 모르곘고, 설명도 많이 틀린것 같아 옜날보다 나아진 지금 다시 글을 적어보고자 한다.


String, StringBuilder, StringBuffer 세개는 모두 java.lang 패키지에 구성이 되어 있으며 선언은 아래와 같다.

 

String

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

StringBuffer

public final class StringBuffer
   extends AbstractStringBuilder
   implements java.io.Serializable, CharSequence

StringBuilder

public final class StringBuilder
    extends AbstractStringBuilder
    implements java.io.Serializable, CharSequence

구동 방식

 

String

가장느림!

+연산의 경우 컴파일러에서 연산작업을 진행하며 StringBuilder.append()로 변환이 되어 작업이 진행된다.

StringBuilder, StringBuffer와 같이 append를 사용하는데 왜느려! 라 할 수도 있으나, 느린이유는

새로운 객체를 생성한 이후에 append작업을 진행하기 때문이다.

 

문자열을 StringBuilder로 생성하고, 이후 append...

더할때 마다 새로운 객체를 생성하며, 해당 객체는 Heap메모리를 사용한다.

많은 사용이 있을 때마다 많은 Heap메모리를 사용하게 된다. 그말은 더 많은 량의 GC의 활동을 유발하게 되고

메모리의 관리에 있어서 비효율적이게 될 수 밖에 없다.

 

StringBuilder(계산방식은 Buffer와 같은AbstractStringBuilder클래스를 태우기 때문에 동일 할 것으로 판단 된다)

기본에 생성이 되어 있는 객체에서 바로 append를 진행하게 된다.

결국 String을 덧셈연산과 같은 코드를 진행하게 된다.

하지만 String은 덧셈연산을 진행할 때마다 객체를 새로이 생성진행하면서 Heap메모리의 많은 사용량을 유발했지만,

StringBuilder, Buffer의 경우에는 이미 생성이 되어있는 객체를 재활용하여 연산하여 진행을 하는 결과로 인해 코드의 실행과정도

줄어들고, 메모리도 효율적인 관리가 가능해진다.

 

일단 속도에서부터 차이가 크게 발생하니 문자열의 덧셈이 필요한 경우에는 StringBuilder, StringBuffer의 append메소드를 사용하여

제작을 하자..

728x90
Comments