StringBuffer
: 문자열을 추가하거나 변경할 때 주로 사용하는 자료형
메소드
- append
- insert
- substring
: 객체를 생성하고 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)
즉, 한번 생성된 값은 언제든지 수정할 수 있다.
: 특정 위치에 원하는 문자열을 삽입할 수 있다.
StringBuffer sb = new StringBuffer();
sb.append("jump to java");
sb.insert(0, "hello "); // 0번 위치에 문자열 삽입
System.out.println(sb.toString());
// 결과값 hello jump to java
StringBuffer sb = new StringBuffer();
sb.append("Hello jump to java");
System.out.println(sb.substring(0, 4)); // 0~4번째 인덱스까지의 문자를 뽑아냄.
// 결과값: Hell
delete
(start, end)deleteCharAt
(index)무조건 StringBuffer를 사용하는 것이 좋은가?
- 상황에 따라 다르다.
무거운 편
이다.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를 사용하는 것이 유리하다!
오!! 정독하고갑니다. 알고리즘 푸는데 StringBuilder가 다른사람 풀이에 자주보여서 궁금했는데 감사해요! : >