본문 바로가기
Java Tutorial

[Java] StringBuilder 클래스

by 미소5 2023. 7. 24.

문자열을 저장하는 String은 내부의 문자열을 수정할 수 없다.(내용 변경 불가)  또한 문자열을 결합하는 +연산자를 많이 사용할수록 성능을 느리게 한다.

문자열을 변경하는 작업이 많을 경우에는 StringBuffer 또는 StringBuilder 클래스를 사용하는 것이 좋다!

 

  • StringBuffer 클래스 
    • String처럼 문자형배열(char[])을 내부적으로 갖고있다. 그러나, String과 달리 내용변경할 수 있다.
  • 배열길이 변경 불가. 공간이 부족할땐? 3단계 처리 필요
    1.  새로운 배열 생성
    2.  내용복사
    3.  참조(주소) 변경

StringBuffer는 저장한 문자열의 길이를 고려해서 적절한 크기로 생성해야 한다.

 

 

  • StringBuffer는 equals()가 오버라이딩되어있지않다. (내용이 아닌, 주소를 비교)
    • StringBuffer를 비교하려면, String으로 변환 후에(sb.toString()) equals()로 비교

 


  • StringBuilder 클래스의 메소드
메소드 설명
append() 문자열 끝에 주어진 매개값을 추가
insert(int offset, ...) 문자열 중간에 주어진 매개값을 추가
delete(int start, int end) 문자열의 일부분을 삭제
deleteCharAt(int index) 주어진 index의 문자(1개)를 삭제
replace(int start, int end, String str) 문자열의 일부분을 다른 문자열로 변환
reverse() 문자열의 순서를 뒤바꿈 (문자열 뒤집기)
serCharAt(int index, char ch) 주어진 index의 문자를 다른 문자로 변환
  • append()는 지정된 내용을 StringBuffer에 추가 후, StringBuffer의 참조를 반환
    • sb.append("123").append("ab");
StringBuilder sb=new StringBuilder();	//StringBuilder 객체 생성

//끝에 문자열 추가
sb.append("java");
sb.append("coding study");		
System.out.println(sb.toString());		//java coding study

//index 4에 "8" 삽입
sb.insert(4, "8");			//java8 coding study

//index 6부터 11까지 "book"문자열로 대치
sb.replace(6, 12, "book");		//java8 book study

//index 4 삭제
sb.deleteCharAt(4);			//java book study

//index 5부터 8까지 삭제
sb.delete(5,9)		//java study

int length=sb.length();		//총 문자수 length는 10

  • StringBuilder 클래스가 제공하는 생성자
    • 기본 생성자인 StringBuilder()는 16개의 문자들을 저장할수있는 버퍼를 만든다.
    • StringBuilder(int capacity) 생성자는 주어진 개수만큼 문자들을 저장할 수 있는 버퍼를 만든다.
    • StringBuilder(String str) 생성자는 str로 주어진 매개값을 버퍼의 초기값으로 저장한다.
StringBuilder sb=new StringBuilder();
StringBuilder sb=new StringBuilder(16);
StringBuilder sb=new StringBuilder("java");

 


  • StringBuffer 또는 StringBuilder 의 사용방법은 동일한데, 차이점은 StringBuffer멀티쓰레드환경에서 사용할 수 있도록 동기화가 적용되어있어 멀티쓰레드에 안전하지만, StringBuilder싱글쓰레드환경에서만 사용하도록 설계되어있다. 
  • 멀티스레드프로그램이 아닌 경우에 동기화는 불필요한 성능 저하 →StringBuffer 대신 StringBuilder를 사용하면 성능 향상

 

728x90
반응형

'Java Tutorial' 카테고리의 다른 글

[Java] 인터페이스 (interface)  (0) 2024.06.16
[Java 필수 지식] 접근제어자  (0) 2024.06.08
[Java] 예외 처리  (0) 2023.07.02
[Java 필수 기초 지식] 클래스 (생성자, 필드, 메소드)  (0) 2023.06.06
[Java] 람다식  (0) 2023.03.14