본문 바로가기
프로그래밍/Java

String vs (StringBuffer vs StringBuilder)

by KHRDev 2022. 6. 7.

String과 StringBuffer, StringBuilder의 차이를 알아보자...


String이 있는데 StringBuffer와 StringBuilder가 왜 있을까? 하는 의문이 들기 마련이다.

이것도 String 저것도 String..개발자라면 제 각각 쓰임이 있겠지라는 생각을 해야 한다.

 

1. String vs (StringBuffer, StringBuilder)

우선 String과 (StringBuffer, StringBuilder)의 가장 큰 차이점은 String은 불변(immutable)하다는 점이다.

그럼 또 String이 불변한가? 음..? 하는 생각을 가질 수 있다.

 

개발을 하다보면 

String str = "Hello";
str += " World";

와 같은 String 활용을 자주 볼 수 있는데 바로 이게 String도 변하네? 라고 착각할 수 있는 요소다.

 

위의 "Hello"값을 담고 있는 String 클래스의 참조변수 str은 " World"가 추가되는 동시에 새로운 String 인스턴스를 생성하여 새로운 메모리 영역을 가리킨다.

즉 "Hello"가 메모리 영역을 차지하고 "Hello World"가 새로운 메모리 영역을 차지하며 사용되지 않는 "Hello"를 담고 있는 str은 후에 가비지 콜렉터에 의해 정리되는 방식이다.

 

예를 들어 반복이 많이 일어나는 로직안에 String class를 += 연산을 통해 만든다면 수많은 String 인스턴스를 생성하게 되는 셈이다. 이렇게 되면 힙(Heap) 메모리에 많은 처리해야 할 가비지가 생성되며 메모리 성능에 영향을 미칠 수 있다.

이런 문제를 방지하기 위해 StringBuffer와 StringBuilder와 같은 가변 객체가 생겨나게 된다.

 

2. StringBuffer vs StringBuilder

그렇다면 StringBuffer와 StringBuilder의 차이는 무엇일까..

StringBuffer와 StringBuilder의 가장 큰 차이점은 동기화 유무이다. StringBuffer는 동기화 키워드를 지원해 멀티스레드 환경에서 안전하다. -> thread safe하다.

반면 StringBuilder는 동기화 키워드를 지원하지 않는다. 고로 멀티스레드 환경에서 StringBuilder를 사용하는 것은 추천하지 않는다. 다만 동기화를 고려하지 않는 단일 스레드 환경에서는 StringBuilder가 StringBuffer보다 성능이 뛰어나다.

 

'프로그래밍 > Java' 카테고리의 다른 글

ModelMapper란?  (0) 2023.07.12
[Java] StringTokenizer에 대해 알아보자~  (0) 2022.08.09
Java에서 문자열 앞뒤 공백 제거  (0) 2022.05.31
Java로 Client IP 찾는 방법  (0) 2022.05.23
++i vs i++  (0) 2022.05.18

댓글