[JAVA-2] StringBuilder와 StringBuffer의 차이
StringBuilder와 StringBuffer의 차이
😱 이번에는?
StringBuilder와 StringBuffer는 무슨 차이
입니다!
🛒 들어가면서
- JAVA에서 문자를 다룰 수 있는 기술을 다양하게 존재합니다! 그중에서 String, StringBuffer, StringBuilder가 가장 많이 사용되는 방법이라고 생각합니당.
- 각각의 기능들은 비슷한 기능을 제공하지만, 실제로 안을 보면 사뭇 다름을 알 수 있어요!
String, StringBuffer, StringBuilder
를 하나씩 풀어나가며 이번 과제를 진행하겠습니당당당!!
😆 불변 객체와 가변 객체
- 불변 객체
- 불변 객체
immutable object
는 생성 후 그 상태를 바꿀 수 없는 객체 - 불변 객체는
String, Integer, Boolean
과 같은Class
도 있지만, 사용자가 직접 final로 원시타입을 생성하여 불변 객체를 만들 수 있습니다!
- 불변 객체
public class Person {
private final String name;
private final int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
}
- 가변 객체
- 가변 객체
mutable object
는 생성 후에도 상태를 변경할 수 있는 개체 int, char, boolean
등 원시타입 필드를 가진 클래스는 가변 객체입니다!- 하지만, 원시타입 필드에
final
을 붙여서 불변 객체로 만들 수도 있습니다.
- 가변 객체
public class Person {
private String name;
private int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
}
🖊String
처음 알고리즘 문제를 풀었을 때, 항상 String을 사용했던 것 같습니다! 그런데 어느 순간부터 String을 사용한 연산을 하면, 메모리를 너무 많이 잡아먹어 문제를 해결하지 못했던 것 같아요..ㅜㅜㅜ
String
은 무엇인가?
String
은 원시 타입이 아닙니다!- 문자열을 가진 객체입니다!
String
은 불변 객체입니다!
- 가변 객체와 다르게 한번 생성하면 그 값을 바꿀 수 없습니다!
+ 하지만, 재할당은 가능합니다!
String
을 생성하는 방법!
String index = new String("예시");
String index = "예시";
String
이 제공하는 Method
equals
indexOf
replaceAll
substring
toUpperCase
결국, 불변객체를 사용해야 하는 경우 String을 사용하는 것은 좋지만, 값이 계속 바뀌는 상황일 경우에는 지양하는 것이 좋다!
🥳 StringBuffer
처음 무작정 코딩테스트를 위해
StringBuffer
를 사용했던 경험이 있습니다. 면접때 면접관님이StringBuffer
를 사용한 이유와StringBuilder
와의 차이점을 물으셨지만.. 결국 완벽한 답을 하지 못한 경험이 있습니다.
String
과 다르게StringBuffer
는 가변 객체입니다!- 기존에 할방받은 공간에 새로운 데이터가 쌓이고, 추가 데이터가 공간보다 커지게 되면, 기존의 버퍼 크기를 늘립니다!!
StringBuffer
는 동기화Synchronized
를 지원합니다!
+ 여러 스레드가 하나의 자원을 사용하려고 할때 다른 스레드의 접근을 막는 것이 동기화 입니다!!- 동기화를 지원하기 때문에
StringBuffer
는 멀티스레드 환경에 쓰입니다!- 물론 멀티스레드 환경이 아니더라도 사용할 수 있지만, 그럴 경우에는
StringBuilder
가 더 효율적입니다.
- 물론 멀티스레드 환경이 아니더라도 사용할 수 있지만, 그럴 경우에는
- 동기화를 지원하는 `StringBuffer"는 멀티스레드 환경에서 안전하게 자원을 사용할 수 있음을 보장합니다!!
- 동기화를 지원하기 때문에
😩 StringBuilder
알고리즘 문제를 풀때,
StringBuffer
보다StringBuilder
가 더 빠르다는 말을 들었습니다. 혹해서 아직까지 StringBuilder를 가끔 사용하고 있는 것 같습니다. 이번 기회에StringBuilder
를 탐구하겠습니당!!
StringBuilder
도StringBuffer
와 마찬가지로 가변 객체입니다!- 하지만 동기화를 지원하지 않는 다는 가장 큰 차이점이 존재합니다!
- 동기화를 지원하지 않는 StringBuilder를 사용하는 가장 큰 이유는
+StringBuffer
보다 단일 스레드 환경에서 빠른 속도를 보여주기 때문입니다!
🎲 결론
String은 불변 객체이고, StringBuffer와 StringBuilder는 가변 객체이다
단일 스레드 환경에서 StringBuilder는 제일 좋은 성능을 발휘한다.
StringBuffer는 Synchronized를 지원하지만, StringBuilder는 지원하지 않는다.
StringBuffer는 멀티 스레드 환경에서 안정성 보장한다.
상황에 맞추어 StringBuffer와 StringBuilder를 사용해야 하며, 무엇이 좋은지는 그 상환이 판단한다.
간혹, String이 StringBuffer와 StringBuilder보다 좋은 성능을 보일 떄 도 있다!
📚 Reference
Author And Source
이 문제에 관하여([JAVA-2] StringBuilder와 StringBuffer의 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dong_geon_kim/JAVA-2-StringBuilder와-StringBuffer의-차이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)