JAVA

[JAVA] String, Stringbuffer, Stringbuilder 차이

hail2y 2024. 3. 14. 02:38
String StringBuffer, StringBuilder
내부적으로 char[] 배열을 가지고 있다
불변(immutable) 객체 가변(mutable) 객체

 

String은 인스턴스 생성 시 문자열의 내용을 변경할 수 없기 때문에 매번 새로운 객체를 생성해야 하지만, StringBuffer와 StringBuilder는 내부적으로 내용을 변경할 수 있게 되어 있다. 그렇기 때문에 후자의 경우 메모리를 더 효율적으로 사용할 수 있다. 

StringBuffer StringBuilder
기본적인 메서드 동일
동기화 O 동기화 X
멀티 스레드에 안전 싱글 스레드에 유리

 

참고로 StringBuffer, StringBuilder의 메서드 중 다음 메서드들은 객체 자신을 반환한다.

  • append()
  • delete(), deleteCharAt()
  • insert()
  • replace()
  • reverse()

코딩 테스트 문제를 풀 때 별 생각 없이 StringBuilder로 코드를 작성했는데 내용을 이해하고 보니 다르게 느껴졌다. 예를 들어 코딩 테스트는 어차피 단일 스레드 작업이니 동기화를 고려할 필요가 없어 StringBuffer보다 성능이 더 좋을 수 있겠다, sb.append(~).append(); 이렇게 체인으로 연결지을 수 있었던 이유가 append() 메서드가 StringBuilder 객체를 반환했기 때문이었구나 하는 부분이다. 제대로 알지 못한 채로 작성했던 코드의 지식을 메우려니 힘들기도 하지만 흥미롭다. 

 

 

https://velog.io/@heoseungyeon/StringBuilder%EC%99%80-StringBuffer%EB%8A%94-%EB%AC%B4%EC%8A%A8-%EC%B0%A8%EC%9D%B4%EA%B0%80-%EC%9E%88%EB%8A%94%EA%B0%80

 

StringBuilder와 StringBuffer는 무슨 차이가 있는가?

Java에서 String 클래스는 불변성을 갖습니다. 그래서 변하지 않는 문자열을 자주 사용하는 경우엔 좋은 성능을 기대할 수 있습니다. 하지만 문자열에 대한 변경이 자주 일어나는 프로그램에서 Stri

velog.io

https://12bme.tistory.com/42

 

[자바] String, StringBuilder, StringBuffer의 차이

* String, StringBuffer, StringBuilder 차이점과 장단점. Java를 사용하면 종종 접하게 되는 문자열 클래스들입니다. (기술면접시 만나게 되는 문제 중 하나.) String, StringBuffer, StringBuilder.. 모두 문자열을 저

12bme.tistory.com

https://zero-iron.tistory.com/68

 

StringBuilder를 초기화하는 가장 빠른 방법

알고리즘 문제를 풀다 보면 요구되는 형식에 맞게 String을 생성해야 할 때가 있는데 StringBuilder를 사용해서 다른 문자가 요구될때 어떻게 초기화하면 좋을지 고민하곤 한다 결론적으로는 StringBuil

zero-iron.tistory.com

https://soo-vely-dev.tistory.com/233

 

[Java] 문자열 반복 메서드 repeat (예제 포함)

프로그래머스에서 입력받은 문자열을 일정 횟수만큼 반복하여 출력하는 문제를 접하였습니다. 문제 설명 문자열 str과 정수 n이 주어질 때, str이 n번 반복된 문자열을 만들어 출력하는 코드를 작

soo-vely-dev.tistory.com

 

'JAVA' 카테고리의 다른 글

[JAVA] comparable, comparator 비교  (0) 2024.07.03
[JAVA] System.in.read()  (1) 2024.06.30
[JAVA] delete(), deleteCharAt()  (0) 2024.05.07
[JAVA] clone(), 얇은 복사와 깊은 복사  (0) 2024.03.26
[JAVA] toString(), String.valueOf()의 차이  (0) 2024.03.20