StringBuffer (+ StringBuilder)

0

알고리즘

목록 보기
8/14

StringBuffer

: 문자열을 추가하거나 변경할 때 주로 사용하는 자료형

메소드

  1. append
  2. insert
  3. substring

1. append

: 객체를 생성하고 append메소드를 이용해서 문자열을 추가해나갈 수 있다.

StringBuffer sb = new StringBuffer();  // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("jump to java");  // StringBuffer 객체 1개 생성
String result = sb.toString();  // String 자료형으로 변경
System.out.println(result);
// 결과값 : hello jump to java

위의 결과는 StringBuffer 자료형인데, 이를 String 자료형으로 변경하기 위해서는 toString() 메소드를 이용해야 한다.

위의 예제를 String 자료형만으로 표현하면 아래와 같다.

String result = "";
result += "hello";
result += " ";
result += "jump to java";   // 총 4개의 String 자료형 객체가 만들어짐
System.out.println(result);
// 결과값 : hello jump to java
  • 두개의 결과는 동일하지만, 내부적으로 객체가 생성되고 메모리가 사용되는 과정은 다르다.
    → StringBuffer를 사용하는 경우, 객체는 한번만 생성된다.
    String 자료형을 이용하는 경우 +연산이 있을 때마다 자동으로 새로운 String 객체를 만들어 낸다.

  • String 자료형은 한번 값이 생성되면 그 값을 변경할 수 없다.(immutable)
    ↳ trim, toUpperCase등의 메소드를 사용할 때, 문자열이 변경되는 것 처럼 생각될 수 있지만, 해당 메소드 수행 시 또 다른 String 객체를 생성하여 리턴할 뿐이다.

  • StringBuffer는 값을 변경할 수 있다.(mutable)
    즉, 한번 생성된 값은 언제든지 수정할 수 있다.

2. insert

: 특정 위치에 원하는 문자열을 삽입할 수 있다.

StringBuffer sb = new StringBuffer();
sb.append("jump to java");
sb.insert(0, "hello ");  // 0번 위치에 문자열 삽입
System.out.println(sb.toString());
// 결과값 hello jump to java

3. substring

StringBuffer sb = new StringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4)); // 0~4번째 인덱스까지의 문자를 뽑아냄.
// 결과값: Hell

4. delete

  • delete(start, end)
  • deleteCharAt(index)

무조건 StringBuffer를 사용하는 것이 좋은가?

  • 상황에 따라 다르다.
  • StringBuffer 자료형은 String 자료형보다 무거운 편이다.
    new StringBuffer()로 객체를 생성하는 것은 메모리 사용량도 많고 속도도 느리다.(단점)

    ➡︎ ∴ 문자열 추가, 변경의 작업이 많은 경우 String Buffer, 문자열 변경 작업이 거의 없는 경우 String 사용이 유리하다.


StringBuilder

StringBuffer와 비슷한 자료형. 사용법은 동일.

StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString();
System.out.println(result);
  • StringBuffer는 멀티 스레드 환경에서 안전하지만, StringBuilder가 성능면에서 더 우수하다.
    따라서, 동기화를 고려할 필요가 없다면 StringBuilder를 사용하는 것이 유리하다!
profile
백엔드를 공부하고 있습니다.

2개의 댓글

comment-user-thumbnail
2022년 10월 27일

오!! 정독하고갑니다. 알고리즘 푸는데 StringBuilder가 다른사람 풀이에 자주보여서 궁금했는데 감사해요! : >

1개의 답글