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 |
댓글