반응형
  • String Builder에 관해서는 전에 https://chb2005.tistory.com/73 여기서 조금 다룬 적이 있음

  • 출력할 때 System.out으로 직접 출력하는 것보다 StringBuilder을 사용해 출력하는 것이 더 빨랐었음

  • 왜 더 빠른지 이 글을 보면 알 수 있을 것이라 생각함

String Builder, String Buffer 란?

  • String의 경우 빈번하게 문자열을 변경할 때는 비효율적임
    • String이 내용을 변경하기 위해선 새로운 객체를 생성하고 복사하는 방식이기 때문
    • ex) String str = "hi"; 라고 하면 "hi" 라는 Literal 객체를 생성하고 이를 복사해 옴
    • str = "hello"; 라고 다시 해주면 다시 "hello" 객체 생성 후 복사해 옴
  • String Builder, String Buffer은 이와 같은 문제를 해결하기 위해 개발됨
    • String과는 달리 동일 객체 내에서 문자열을 변경하는 것이 가능하기 때문에 문자열의 추가, 수정, 삭제가 빈번하게 발생하는 경우에는 이 두 클래스를 사용하는 것이 유리

String Builder, String Buffer 사용 예제

public static void main(String[] args) {
    StringBuilder sb = new StringBuilder("123");
    // StringBuffer sb = new StringBuffer("123");   
    // 사용방법은 둘이 일치

    sb.append(45).append("67");
    System.out.println(sb);   // 1234567 출력
    sb.delete(0, 2);          // 0 ~ 1번(2번 직전까지) 인덱스 삭제
    System.out.println(sb);   // 34567 출력
    sb.replace(0, 3, "AB");   // 0 ~ 3번 인덱스 값을 "AB"로 교체
    System.out.println(sb);   // AB67 출력
    sb.reverse();             // 거꾸로 뒤집기
    System.out.println(sb);   // 76BA 출력
    System.out.println(sb.substring(1, 3));     // 1 ~ 2번(3번 직전까지) 인덱스 추출 => 6B 출력
    System.out.println(sb.substring(1));       // 1번 인덱스 ~ 끝까지 출력 => 6BA 출력
}
  • 사용시 주의할 점은 어떤 메소드(replace, ...)는 i번째 index부터 j번째 index까지를 나타내는 반면 어떤 메소드(delete, ...)는 i번째 index부터 j - 1번째 index까지를 나타냄

String Builder VS String Buffer

  • 이 둘은 동일한 API를 가지고 있지만, 구분해 놓은 가장 큰 이유는 동기화의 유무
  • String Buffer는 동기화를 지원하여 멀티쓰레드 환경에서 안전함 (thread-safe)
  • String Builder는 동기화를 지원하지 않아 멀티쓰레드 환경에는 적합하지 않지만, 단일 쓰레드 환경에서는 String Buffer보다 좋은 성능을 냄
반응형

↓ 클릭시 이동

복사했습니다!