java.lang.StringBuilder 사용방법
StringBuilder 와 StringBuffer 는 흔히 사용하는 String 과 같이 문자열을 다루는 클래스이다.
String
String은 immutable(불변), StringBuffer는 mutable(변함)이다.
String은 문자열을 대표하는 것으로써 문자열을 조작하는 경우에 유용하게 사용할 수 있다.
또한 String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다.
String str = "Hello ";
str = str + "World!";
str 변수에 "Hello" 가 "Hello World!" 값으로 변경되는데
새로운 메모리 영역을 가리키게 변경되고 "Hello" 는 Garbage 로 남아있다가
GC(Garbage Collection) 에 의해 사라진다.
위에서 언급했던 String 클래스는 불변이기 때문에 문자열을 수정하는 시점에서 새로운 String 인스턴스가 생성되는 것이다. String 은 불변하는 문자열을 자주 읽어들이는 경우 사용하면 좋은 성능을 발휘할 수 있다. 그러나 문자열의 추가, 수정, 삭제 등의 연산이 자주 일어날 때 String 클래스를 사용하게 되면 힙(Heap) 메모리에 많은 임시 가비지(Gabage) 가 생성되어 힙 메모리의 부족으로 애플리케이션 성능에 좋지 않은 영향을 끼치게 된다.
이를 해결하기 위해 StringBuilder, StringBuffer 클래스가도입되었다.
StringBuilder, StringBuffer
문자열 연산 등으로 기존 객체의 공간이 부족할 경우,
기존 버퍼의 크기를 늘려 유연하게 동작한다.
StringBuilder 와 StringBuffer 클래스가 제공하는 메서드는 동일하다.
그렇다면 두 클래스의 차이점은 무엇일까?
StringBuffer 는 동기화 키워드를 지원하여
멀티쓰레드 환경에서 안전하다(thread-safe)할 수 있고,
StringBuilder 는 단일쓰레드이거나 동기화를 고려하지
않아도될 때 사용할 수 있다.
그렇기 때문에 StringBuilder 에 비해 조금 무겁다고 할 수 있다.
따라서 특별한 이유가 없다면 상대적으로 가벼운
StringBuilder 를 사용하는 것이 일반적이다.
StringBuilder 메소드
[ String 클래스와 동일한 메소드 ]
▶ charAt() : 특정 인덱스 위치의 문자열 반환
▶ indexOf() / lastIndexOf() : 문자열을 검색하여 위치 반환
▶ length() : 문자열의 길이 반환
▶ replace() : 검색된 문자열 교체
▶ substring() : 특정 인덱스 범위 내 문자열을 복사하여 새로 생성된 인스턴스 반환
▶ toString() : 문자열 출력
append()
▶ 문자열 추가
public class Study1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World!");
System.out.println(sb); // Hello World!
}
}
capacity()
▶ 현재 char[] 배열이 가진 사이즈 정보 반환
▶ length() 는 실제 데이터가 들어있는 문자열의 길이이고,
capacity() 는 현재 배열 사이즈이다.
▶ append() 로 문자열 조정시 배열 사이즈가 자동으로 변경
public class Study1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
System.out.println(sb.length()); // 5
System.out.println(sb.capacity()); // 21
}
}
delete()
▶ 매개변수로 전달받은 인덱스 사이의 문자열 삭제
public class Study1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World!");
System.out.println(sb.delete(0, 1)); // ello World!
}
}
deleteCharAt()
▶ 특정 인덱스의 1개의 문자열 삭제
public class Study1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World!");
System.out.println(sb.deleteCharAt(0)); // ello World!
// sb.delete(0, 1)과 값이 동일
}
}
insert()
▶ 특정 위치에 문자열 삽입
public class Study1 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("Hello");
sb.insert(5, " Java!");
System.out.println(sb); // Hello Java!
}
}
참고
'Back-End > Java' 카테고리의 다른 글
[Java] 람다 표현식 (Lambda Expression) 문법 (0) | 2022.01.13 |
---|---|
[Java] 쓰레드 (Thread)와 멀티 쓰레드(Multi Thread) (1) | 2022.01.12 |
[Java] HashMap 탐색 (keySet(), entrySet()) (0) | 2022.01.10 |
[Java] 이클립스(eclipse) 설치 (0) | 2022.01.10 |
[Java] java 설치 (JDK 설치, 환경변수 설정) (0) | 2022.01.10 |
최근댓글