Language/Java

[Java] StringBuilder와 StringBuffer 정리

pongic 2022. 9. 26. 14:10
반응형

StringBuilder

한번 생성된 String 클래스의 인스턴스는 여러 개의 문자열을 더할 때 매번 새로운 인스턴스를 생성해야 한다. 만약 100만개의 문자열이 있는데 모두 더하는 작업이 필요하다면 인스턴스 생성과정이 100만번 이루어져야 하기 때문에 매우 비효율적이다. 그래서 StringBuilder를 사용한다.

 

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("문자열 ").append("연결");
String str = stringBuilder.toString();
System.out.println(stringBuilder);
System.out.println(str);

/* 출력
문자열 연결
문자열 연결
*/

먼저 StringBuilder의 객체를 생성한 후 append()의 인자로 연결하고자 하는 문자열을 넣어서 StringBuilder의 객체를 통해 호출한다. 변수에 문자열을 할당할 때에는 toString()메서드를 사용한다

 

 

StringBuffer

StringBuffer 클래스의 인스턴스는 그 값을 변경할 수도 있고 추가할 수도 있다. StringBuffer 클래스는 내부적으로 버퍼(buffer)라고 하는 독립적인 공간을 가진다. 버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이다. 또한 생성자를 통해 그 크기를 별도로 설정할 수 있다.

 

덧셈 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성한다.

참고로 덧셈 연산자를 문자열과 함께 사용하면 자동으로 문자열로 형변환이 이뤄지고 문자열이 결합된다. 따라서 문자열을 많이 결합할수록 공간이 낭비되고 속도 또한 느려진다. 하지만 StrinBuffer인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로 공간의 낭비도 없고 속도도 빨라진다.

 

StringBuffer에서 사용가능한 메서드

append()

인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 마지막에 추가한다. String 클래스의 concat()과 같은 결과이지만 속도가 훨씬 빠르다. 

StringBuffer str = new StringBuffer("Java");
System.out.println("문자열 : " + str);
System.out.println(str.append(" programming"));
System.out.println("append() 메서드 호출 후 문자열 : " + str);

/* 출력
문자열 : Java
Java programming
append() 메서드 호출 후 문자열 : Java programming
*/

 

capacity()

StringBuffer 인스턴스의 현재 버퍼 크기를 반환한다. int 타입을 리턴한다.

StringBuffer str1 = new StringBuffer();
StringBuffer str2 = new StringBuffer("Java");
System.out.println(str1.capacity());
System.out.println(str2.capacity());

/* 출력
16
20
*/

 

delete(int start, int end) / deleteCharAt(int index)

전달된 인덱스에 해당하는 부분 문자열을 해당 문자열에서 제거한다. 또한 deleteCharAt() 사용하면 특정 위치의 문자 한 개만 제거할 수도 있다. 

StringBuffer str = new StringBuffer("Java Oracle");
System.out.println("문자열 : " + str);
System.out.println(str.delete(4, 8));
System.out.println(str.deleteCharAt(1));
System.out.println("deleteCharAt() 메소드 호출 후 문자열 : " + str);

/* 출력
문자열 : Java Oracle
Javacle
Jvacle
deleteCharAt() 메소드 호출 후 문자열 : Jvacle
*/

delete()메서드를 사용하여 해당 문자열에서 인덱스가 4인 위치의 문자부터 7인 위치의 문자까지를 삭제한다.

 

insert()

인수로 전달된 값을 문자열로 변환한 후, 해당 문자열의 지정된 인덱스 위치에 추가한다.

StringBuffer str = new StringBuffer("Java Programming!!");
System.out.println("문자열 : " + str);
System.out.println(str.insert(4, "Script"));
System.out.println("insert() 메서드 호출 후 문자열 : " + str);

/* 출력
문자열 : Java Programming!!
JavaScript Programming!!
insert() 메서드 호출 후 문자열 : JavaScript Programming!!
*/
반응형

'Language > Java' 카테고리의 다른 글

[Java] Map 정리  (4) 2022.09.28
[Java / 자료구조] 그래프 (Graph) 정리  (0) 2022.09.26
[Java / 자료구조] 트리 (Tree) 정리  (1) 2022.09.26
[Java] StringTokenizer 클래스 정리  (0) 2022.09.26
[Java] String 문자열 정리  (0) 2022.09.26