Back-End/Java

TIL 230605 : Stringbuilder랑 가까워지기.

우인입니다 2023. 6. 6. 12:18

요즘 코딩테스트 문제를 연습하는데, 문자열을 다루는 것에서 기초가 부실함을 느끼기도 했고 다들 String만 쓰는게 아닌거 같길래, 이에 Stringbuilder와 가까워져보기로 한다.


1. Stringbuilder? Stringbuffer? String?

 우선 크게 나눠보자면,         [   String    /    Stringbuilder, Stringbuffer   ] 두가지이다.

메소드같은 기능적인 부분들이야 비슷하고, 그때그때 구글링해서 써도 무방하지만,

메모리상에 어떻게 동작하는지 어떤때에 어떻게 활용해야 장단점이 있는지 알고 싶었다.

그런면에서 우선, String과 Stringbuilder 이 두가지로 우선 정리할 수 있다.

 

String

String은 쉽게 말해서 그때그때 인스턴스를 만든다.

새로운 값을 할당해도 기존 메모리에 저장하는 게 아니고 새로운곳에 만들어서 가비지 콜렉션으로 사라지게 된다.

한마디로 한번만들면 그 값은 변하지 않고 불변성이 있다고 한다.

그러므로 String 클래스는 한번 만들면 변하지않고 읽기를 자주하는 경우 쓰면 용이하다. (읽기 자주할 때 좋음)

 

StringBuilder/StringBuffer

아무래도 지금 소개하는 이 두 개념은 상반된 개념이겠죠.?

이는 값을 변경해도 동일 객체내에서 변경이 가능하다. 가변성

이렇다보니 잦은 추가, 변경시에 용이하다.


2. StringBuffer <-> StringBuilder

 위에서 가변성이라는 특징을 공통점으로 묶인 이 두 클래스의 차이점은 뭘까.

아직 배우진 않았지만 '멀티쓰레드 환경에 안전한 지' 이다.

 

Buffer 가 멀티쓰레드에 안전하고, Builder는 싱글스레드에 안전하다.

버퍼는 완충느낌이니까.. 멀티.. 한번에 여러개.. 빌더는 건물 하나 짓는다 생각하고 단일 스레드 환경에 적합..

예전 튜터님의 코멘트가 이제야 와닿은 순간.

+ 스레드에 대한 공부가 필요한 듯 하다.

 


정리

누군가가 야무지게 정리해준 표

읽기만 많이 하면 String.

추가, 수정이 많으면  StringBuffer / StringBuilder.

 

직접 정리하니 잘 숙지되고 좋네요.