본문 바로가기
Back-End/Java

TIL 230605 : Stringbuilder랑 가까워지기.

by 우인입니다 2023. 6. 6.

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


1. Stringbuilder? Stringbuffer? String?

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

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

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

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

 

String

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

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

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

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

 

StringBuilder/StringBuffer

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

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

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


2. StringBuffer <-> StringBuilder

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

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

 

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

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

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

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

 


정리

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

읽기만 많이 하면 String.

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

 

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