Lined Notebook

[Java] 02. String / StringBuffer / StringBuilder 차이

by ymkim

01. 서론

  • 자바에서 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 자료형 제공
  • 세가지 모두 문자열을 다루는데 사용하지만 목적에 따라 쓰임새가 달라짐
  • String, StringBuffer, StringBuilder의 차이점에 대해 간략히 알아보고, 상황에 맞는 사용법 숙지
  • 연산이 많지 않을때는 어떤 클래스를 사용해도 이슈가 발생하지 않으나 연산횟수가 많아지거나 멀티쓰레드, Race condition 상황이 자주 발생하면 각 상황에 맞게 클래스를 선택해야 함

02. String vs StringBuffer/StringBuilder

String str = "hello" // String str = new String("hello"); 와 동일
str = str + "world"; // [ hello world ]

 

  • StringStringBuffer/StringBuilder 의 가장 큰 차이점String불변(immutable) 이라는 점이다
  • 위 예시를 보면 hello 값을 가지고 있던 String 클래스의 참조변수 str이 가리키는 곳에 저장된 hello에 world를 더해 hello world가 된 것으로 착각 할 수 있음
  • 실제로는 기존 str은 새로운 참조(메모리)를 가르키게 되고 해당 메모리 공간에 “hello world” 라는 문자가 저장된다
  • 즉, String은 문자열을 수정, 삭제, 추가 하는 경우 새로운 String 객체를 만들어서 처리한다

03. StringBuffer / StringBuilder 클래스

StringBuffer sb = new StringBuffer("hello");
sb.append("world");

  • StringBuffer, StringBuilder가변성(mutable) 을 가진다
  • StringBuffer / StringBuilder 클래스는 문자열을 연산(추가, 삭제, 수정) 할 때 주로 사용하는 자료형
  • String 자료형만으로 +, concat() 통해 문자열 사용 가능
    • 하지만 덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면 새로운 String 인스턴스를 생성
    • 문자열을 결합하면 결합할수록 공간 낭비와 속도 또한 매우 느려지게 된다
  • StringBuilder는 StringBuffer에 비해 연산 성능이 우수하지만, thread none safe 하다는 특징이 있음
  • StringBuffer는 StringBuilder에 비해 연산 성능이 떨어지지만, thread safe 하다는 특징이 있음

04. 내용 정리 및 비교

  String StringBuffer StringBuilder
가변 여부 불변 가변 가변
스레드 세이프 O O X
연산 속도 느림 빠름 아주 빠름
사용 시점 - 문자열 추가 연산이 적은 경우
- 스레드 세이프 환경에서
- 문자열 추가 연산이 많은 경우
- 스레드 세이프 환경에서
- 문자열 추가 연산이 많고, 빠른 연산 필요시
- 단일 스레드 환경에서

99. 참고 자료

 

☕ 자바 String / StringBuffer / StringBuilder 차이점 & 성능 비교

자바에서는 대표적으로 문자열을 다루는 자료형 클래스로 String, StringBuffer, StringBuilder 라는 3가지 자료형을 지원한다. 위 3가지 클래스 자료형은 모두 문자열을 다루는데 있어 공통적으로 사용되

inpa.tistory.com

 

'Java' 카테고리의 다른 글

[Java] 04. Vetor vs ArrayList vs LinkedList 간단 정리  (0) 2024.04.09
[Java] 03. Cookie & Session?  (0) 2024.04.09
[Java] 01. List vs Set vs Map 차이점  (0) 2024.04.09

블로그의 정보

기록하고, 복기하고

ymkim

활동하기