Java에서 문자열을 다루는 클래스 종류
String, StringBuffer, StringBuilder 3가지 지원
StringBuilder 클래스란?
StringBuilder 클래스는 Java에서 문자열을 효율적으로 조작하기 위해 제공되는 클래스이다. String과 마찬가지로 문자열을 다루는 클래스이지만, 가변적인 크기의 문자열을 다룰수 있으며, 문자열을 추가, 수정, 삭제, 연결 등의 작업이 가능함.
StringBuilder sb = new StringBuilder(30);
인자로 전달되는 30 크기 만큼 문자를 저장할 수 있는 공간 마련
StringBuilder 특징
1. 가변적인 크기
- StringBuilder 는 내부 버퍼를 사용하여 문자열을 저장하며, 내부 버퍼의 크기는 동적으로 조정됨. 이로 인해 문자열을 추가하거나 수정할 때마다 새로운 문자열을 생성하는 'String' 과는 달리, 메모리 할당과 복사 등의 오버헤드를 줄일 수 있음.
2. 문자열 조작
- 다양한 메소드를 제공하여 문자열 조작 가능
- append(값) : 문자열 추가
- delete(시작, 끝) : 시작 인덱스부터 끝 인덱스까지의 내용을 삭제
- insert(위치, 값) : 특정 위치에 문자열을 추가
- replace(시작, 끝, 값) : 시작 인덱스부터 끝 인덱스 이전까지의 내용을 추가하고자 하는 값으로 문자열 대체
- reverse() : 저장한 문자열의 값을 뒤집음
- substring(시작, 끝) : 저장된 문자열 중 시작부터 끝 이전까지의 내용만 담은 String 인스턴스 반환
- deleteCharAt(위치) : 특정 위치 값 삭제
3. 스레드 안전성
- 'StringBuilder' 는 스레드 안전성은 떨어짐. 동시에 여러 스레드에서 접근하거나 조작하면 안전하지 못함. 따라서 멀티스레드 환경에서는 동기화를 고려해야함. -> 'StringBuffer' 사용 : 'StringBuilder' 보다 속도는 느리지만, 안전성은 더 좋음.
StringBuilder, StringBuffer는 equals()로 비교 불가
String 객체와 달리 equals() 메소드를 오버라이딩 하지 않아 equals()를 사용하면 '==' 으로 비교한 것과 같은 결과를 얻는다.
String s = sb.toString();
String s2 = sb2.toString();
System.out.println(s.equals(s2)); //true
따라서 위와 같이 String 객체로 변환 후 비교해줘야 함.
요약
1. String 객체는 +연산을 할 때마다 새로운 인스턴스를 생성하게 되어 속도가 느리다.
2. 이를 해결하기 위해 StringBuilder, StringBuffer 를 사용함
3. 속도 : String << StringBuffer < String Builder
4. 안전성 : StringBuilder < StringBuffer
-> 문자열 연산 시에는 앵간하면 StringBuilder나 StringBuffer 사용하자 !
'JAVA' 카테고리의 다른 글
| [Java] String / StringBuffer / StringBuilder 비교 (0) | 2023.08.14 |
|---|---|
| [Java] 배열을 List로, List를 배열로 변환 (1) | 2023.07.20 |
| [Java] 최대공약수, 최소공배수 구하기 (0) | 2023.07.20 |
| [Java] 정렬 (0) | 2023.05.28 |
| [Java] 소수 구하는 알고리즘 (0) | 2023.05.25 |