반응형
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보다 좋은 성능을 냄
반응형
'JAVA > 기본 문법' 카테고리의 다른 글
[JAVA] Calendar 클래스 (0) | 2022.10.03 |
---|---|
[JAVA] Big Integer (0) | 2022.10.03 |
[JAVA] 추상 클래스(Abstract Class)와 인터페이스(interface), 인터페이스의 default method (0) | 2022.10.03 |
[JAVA] 다형성(Polymorphism) 정의 및 활용(UpCasting, DownCasting) + instanceof (2) | 2022.10.03 |
[JAVA] 우선순위 큐 (Priority Queue), 정렬 전략 설정법 (0) | 2022.05.28 |