[Java] StringBuilder 사용 방법과 관련 메소드, StringBuffer와의 차이점

Hee·2024년 4월 18일

Java 복습

목록 보기
36/46
post-thumbnail

스트링빌더(StringBuilder)

: 아무 값도 가지고 있지 않은 String 객체이다.


StringBuilder 사용 예시

StringBuilder sb = new StringBuilder();

// 해당 StringBuilder에 "hello", 공백, "world"를 차례대로 추가
sb.append("hello");
sb.append(" ");
sb.append("world");

// StringBuilder 추가된 값을 toString()메소드를 이용하여 반환
String str = sb.toString();

출력결과: hello world



StringBuilder 가지고 있는 메소드들은 대부분 자기자신, this를 반환

StringBuilder sb2 = new StringBuilder();
StringBuilder sb3 = sb2.append("hello");
if(sb2 == sb3){
	System.out.println("sb2 == sb3");
}
  • 자기 자신의 메소드를 호출하여 자기 자신의 값을 바꿔나가는 것을 메소드 체이닝이라고 한다.
  • StringBuilder 클래스는 메소드 체인 방식으로 사용할 수 있도록 만들어져 있다.
String str2 = new StringBuilder().append("hello").append(" ").append("world").toString();
System.out.println(str2);
  • 앞서 5줄로 작성했던 코드를 한 줄로 수정할 수 있다.
  • StringBuilder는 append 메소드 외에도 길이를 구하거나, 자르거나 등의 다양한 메소드들을 가지고 있다.


StringBuilder 관련 메소드

  1. 추가(append)메소드
  • 추가할 때는, 버퍼명.append(넣을문자) 메소드를 사용
StringBuilder sb = new StringBuilder();

sb.append('a');
sb.append('b');
sb.append('c');

System.out.println(sb);

// 출력: abc
  1. 삭제(deleteCharAt)메소드
  • 삭제할 때는, 버퍼명.deleteCharAt(삭제할문자의 인덱스) 메소드를 사용
StringBuilder sb = new StringBuilder();

sb.append('a');
sb.append('b');
sb.append('c');

sb.deleteCharAt(1);

System.out.println(sb);

// 출력: ac
  1. 값변경(setCharAt)메소드
  • StringBuilder 객체의 특정 값을 변경할 때, 버퍼명.setCharAt(인덱스, 문자)메소드를 활용한다.
StringBuilder name = new StringBuilder("starfucks");
name.setCharAt(4, 'b');

System.out.println(name); 			// starbucks
  1. 거꾸로(reverse)메소드
  • String 문자열을 뒤집기 할 때, StringBuilder(문자열).reverse().toString() 메소드를 사용한다.
String str = "Reverse";
String reversedStr = new StringBuilder(str).reverse().toString();
System.out.println(reversedStr);

// 출력: esreveR


StringBuilder와 StringBuffer의 차이점

StringBuilder와 StringBuffer는 모두 문자열을 변경 가능한 가변적인 형태로 다루는 클래스이다. 하지만 두 클래스 간에 중요한 차이점이 있다.

  1. 동기화 여부
  • 'StringBuffer'는 동기화된 메서드로 구현되어 있어 멀티스레드 환경에서 안전하게 사용할 수 있다. 즉, 여러 스레드가 동시에 'StringBuffer'를 사용해도 데이터 일관성이 유지된다.
  • 반면에 'StringBuilder'는 동기화를 보장하지 않는다. 단일 스레드 환경에서의 사용에 최적화 되어 있다.
  1. 성능
  • 'StringBuffer'는 동기화를 위한 추가적인 비용이 발생하므로 일반적으로 성능이 더 낮다.
  • 'StringBuilder'는 동기화를 고려하지 않기 때문에 성능이 더 빠르다.

0개의 댓글