요즘 코딩테스트 문제를 연습하는데, 문자열을 다루는 것에서 기초가 부실함을 느끼기도 했고 다들 String만 쓰는게 아닌거 같길래, 이에 Stringbuilder와 가까워져보기로 한다.
1. Stringbuilder? Stringbuffer? String?
우선 크게 나눠보자면, [ String / Stringbuilder, Stringbuffer ] 두가지이다.
메소드같은 기능적인 부분들이야 비슷하고, 그때그때 구글링해서 써도 무방하지만,
메모리상에 어떻게 동작하는지 어떤때에 어떻게 활용해야 장단점이 있는지 알고 싶었다.
그런면에서 우선, String과 Stringbuilder 이 두가지로 우선 정리할 수 있다.
String
String은 쉽게 말해서 그때그때 인스턴스를 만든다.
새로운 값을 할당해도 기존 메모리에 저장하는 게 아니고 새로운곳에 만들어서 가비지 콜렉션으로 사라지게 된다.
한마디로 한번만들면 그 값은 변하지 않고 불변성이 있다고 한다.
그러므로 String 클래스는 한번 만들면 변하지않고 읽기를 자주하는 경우 쓰면 용이하다. (읽기 자주할 때 좋음)
StringBuilder/StringBuffer
아무래도 지금 소개하는 이 두 개념은 상반된 개념이겠죠.?
이는 값을 변경해도 동일 객체내에서 변경이 가능하다. 가변성
이렇다보니 잦은 추가, 변경시에 용이하다.
2. StringBuffer <-> StringBuilder
위에서 가변성이라는 특징을 공통점으로 묶인 이 두 클래스의 차이점은 뭘까.
아직 배우진 않았지만 '멀티쓰레드 환경에 안전한 지' 이다.
Buffer 가 멀티쓰레드에 안전하고, Builder는 싱글스레드에 안전하다.
버퍼는 완충느낌이니까.. 멀티.. 한번에 여러개.. 빌더는 건물 하나 짓는다 생각하고 단일 스레드 환경에 적합..
예전 튜터님의 코멘트가 이제야 와닿은 순간.
+ 스레드에 대한 공부가 필요한 듯 하다.
정리
읽기만 많이 하면 String.
추가, 수정이 많으면 StringBuffer / StringBuilder.
직접 정리하니 잘 숙지되고 좋네요.
'Back-End > Java' 카테고리의 다른 글
TIL 230609 : 날짜 시간 데이터와 인사하기. (1. Calendar, Date) (0) | 2023.06.09 |
---|---|
TIL 230607 : ArrayList와 List 사이. (feat. 업캐스팅, 다운캐스팅) (0) | 2023.06.07 |
TIL 230602 : 튜터님의 코드와 비교해보는 코드리뷰 (키오스크 주문 프로그램) (0) | 2023.06.04 |
TIL 230601 : ArrayList와 함께한 오늘의 삽질들. (0) | 2023.06.01 |
TIL 230531 : ArrayList와 가까워지기. (0) | 2023.05.31 |