[Java] StringBuffer, StringBuilder

2022. 12. 31. 03:27·Back-End/Java

백준 알고리즘과 프로그래머스 코딩테스트를 작성하면서 String의 substring을 활용하며 문제를 해결하다가 효율성이 떨어지는 것을 느꼈다.
그래서 찾아보니 문자열을 StringBuilder나 StringBuffer를 통해 append하는 것이 많았다. 이 클래스에 대한 정보를 정리하기 위한 글을 작성하기로 하였다.

String

  • 문자열
  • implements Serializable, Comparable, CharSequence
  • jdk 1.5 이후부터 +연산은 StringBuilder 사용해 성능 최적화 (단, 여러줄에 걸쳐 +할 경우 StringBuilder도 여러 번 선언)
1
2
3
4
5
public final class String implements Serializable, 
                        Comparable<String>, CharSequence {
  private final char[] value;
  ...
}
cs

위의 코드를 살펴보자char형의 배열을 final로 선언한 것이 보인다.

String + String의 결과는 새로운 String

이렇게 String 주소값이 stack에 쌓이고 클래스는 Garbage Collector 호출되기 전까지

heap에 지속적으로 쌓이는 구조이다.

StringBuffer

  • thread-safe 하고, 변경 가능한 문자열
  • implements Serializable, CharSequence
  • web이나 소켓 환경 같은 비동기 동작이 많은 경우에 자주 사용한다.

StringBuilder

  • 변경 가능한 문자열
  • implements Serialiazable, CharSequenceStringBuffer와 StringBuilder에서 + 연산 대신 사용하는 함수

append()

  • value에 사용되지 않고 남아있는 공간에 새로운 문자열이 들어갈 정도의 크기가 있다면 그대로 삽입한다!!
  • 그렇지 않다면 value 배열의 크기를 두배로 증가시키면서 기존의 문자열을 복사하고 새로운 문자열을 삽입한다.

sb 문자열 크기 계산

참조 :
https://docs.oracle.com/javase/7/docs/api/java/lang/package-summary.html

https://novemberde.github.io/2017/04/15/String_0.html

https://cjh5414.github.io/why-StringBuffer-and-StringBuilder-are-better-than-String/

https://yeonyeon.tistory.com/45

'Back-End > Java' 카테고리의 다른 글

[Java] EnumMap 정리  (0) 2023.11.23
[Java] Java 11 vs Java 17, JDK 17 정리  (0) 2023.10.14
[Java] 함수 파라미터의 final 키워드를 사용하는 이유  (0) 2023.05.08
[자료구조] Java 우선순위 큐(Priority Queue)  (0) 2023.02.03
'Back-End/Java' 카테고리의 다른 글
  • [Java] EnumMap 정리
  • [Java] Java 11 vs Java 17, JDK 17 정리
  • [Java] 함수 파라미터의 final 키워드를 사용하는 이유
  • [자료구조] Java 우선순위 큐(Priority Queue)
COBI-98
COBI-98
배운 것을 응용하기 위해 기록하는 것을 선호하며 백엔드를 공부하고 있습니다.
  • COBI-98
    은로그
    COBI-98
  • 전체
    오늘
    어제
    • 은로그 (79)
      • Back-End (32)
        • Java (5)
        • Spring (16)
        • DB (1)
        • 알고리즘 (7)
        • ETC (2)
      • 개발 일기 (0)
      • 회고 (4)
      • Project (10)
        • 협업프로젝트 (7)
        • 국비프로젝트 (2)
      • Web (2)
        • Server (2)
      • Git (2)
      • CS (0)
      • 코딩테스트 (24)
        • 백준 (17)
        • 프로그래머스 (7)
      • 우아한 테크코스 (5)
  • 블로그 메뉴

    • ✨깃허브
    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    재귀
    코딩테스트
    Java
    인프런
    재귀알고리즘
    깊이 우선 탐색
    백준
    김영한님
    inflean
    레벨2
    배민
    큐
    elk
    재귀함수
    우아한형제들
    DFS
    N과 M
    배달의민족
    코테
    우아한테크코스
    2단계
    그리디 알고리즘
    Spring
    백엔드
    우테코
    김영한강의
    백트래킹
    백준Java
    BFS
    프로그래머스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
COBI-98
[Java] StringBuffer, StringBuilder
상단으로

티스토리툴바