포스트

StringBuilder와 StringBuffer

StringBuilder와 StringBuffer


1. StringBuilder 사용 이유

String 변수선언후 값을 변경 할때마다 메모리가 낭비 된다.

아래 코드 참고
1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
  String name = "일순신"; // 메모리상에 name 1개 소모
  name += ",이순신";  // 메모리상에 name 1개 소모
  name += ",삼순신";  // 메모리상에 name 1개 소모
  name += ",사순신";  // 메모리상에 name 1개 소모
  name += ",오순신";  // 메모리상에 name 1개 소모
  name += ",육순신";  // 메모리상에 name 1개 소모
  name += ",칠순신";  // 메모리상에 name 1개 소모
  name += ",팔순신";  // 메모리상에 name 1개 소모
  name += ",구순신";  // 메모리상에 name 1개 소모
  name += ",십순신";  // 메모리상에 name 1개 소모
  //매번 메모리상의 name 이 소모가 된다.
}



2. StringBuffer 와 StringBuilder

2-1. StringBuffer

🚀 StringBuffer의 특징 🚀

StringBuffer 는 Multi thread 를 지원해준다.
그래서 Multi thread 로 움직이는 게임에는 StringBuffer 를 사용한다.
StringBuffer 는 StringBuilder 보다 무겁고 동작속도가 떨어지지만
Multi thread 를 지원해주므로 게임에서 사용하는 것이 적합하다.

아래 코드 참고
1
2
3
4
5
6
7
8
9
10
11
12
StringBuffer sb1 = new StringBuffer();
sb1.append("일순신");
sb1.append(",이순신");
sb1.append(",삼순신");
sb1.append(",사순신");
sb1.append(",오순신");
sb1.append(",육순신");
sb1.append(",칠순신");
sb1.append(",팔순신");
sb1.append(",구순신");
sb1.append(",십순신");
System.out.println(sb1);
최상단의 코드 출력 결과와 동일하다.
캡처는 하단 참고



2-2. StringBuilder

🚀 StringBuilder의 특징 🚀

StringBuilder 는 Multi thread 를 지원해주지 못하고
StringBuilder 는 Single thread 만 지원해준다.
Single thread 로 움직이는 웹에는 StringBuilder 를 사용한다.
왜냐하면 StringBuilder 가 StringBuffer 보다 가볍고 또한 동작속도가
빠르므로 그렇다.

아래 코드 참고 StringBuffer와 동일하다.
1
2
3
4
5
6
7
8
9
10
11
12
StringBuilder sb2 = new StringBuilder();
sb2.append("일순신");
sb2.append(",이순신");
sb2.append(",삼순신");
sb2.append(",사순신");
sb2.append(",오순신");
sb2.append(",육순신");
sb2.append(",칠순신");
sb2.append(",팔순신");
sb2.append(",구순신");
sb2.append(",십순신");
System.out.println(sb2);
이미지테스트설명
상위 세 코드의 출력 결과



3. 사용해보기

3-1. 초기화 시키기

사용되던 StringBuilder 에 append를 계속 한다면 원래 값에 쌓이기만할 것이다.
따라서 기존값을 전부 없애고 새로운 값을 추가 하고자 할때는 두가지 방법이 있다.

  1. 길이를 0으로 바꾸기
  2. 인스턴스를 새로 생성해버리기
아래 코드 참고
1
2
3
4
5
6
7
8
9
10
11
12
//sb2 초기화 하기
sb2.setLength(0);
sb2.append("다시 처음부터 시작");
sb2.append("덧 붙임");
sb2.append("끝");
System.out.println(sb2);
//두번째 방법 인스턴스 새로 만들어버림
sb2 = new StringBuilder();
sb2.append("또 다시 처음부터 시작");
sb2.append("또 덧 붙임");
sb2.append("또 끝");
System.out.println(sb2);



3-2. 문자열 뒤집기

reverse 내장 메서드로 간단하게 구현할 수 있다.
ex) stringBuilder.reverse()

아래 코드 참고
1
2
3
4
5
//문자열 거꾸로 뒤집기
String str = "안녕하세요";
StringBuilder sb3 = new StringBuilder(str);
sb3.reverse();//문자열을 뒤집어 버림
System.out.println(sb3);//기대값 요세하녕안
이 작성글은 저작권자의 CC BY 4.0 라이센스를 따릅니다.