본문 바로가기
JAVA(프로그래밍)

java String vs StringBuffer 비교

by 켈리113 2018. 7. 26.
반응형

java String vs StringBuffer 비교

안녕하세요.
java에 빼놓을수 없는 String Class 가장 빈번하게 쓰이는 클래스라고 할수 있습니다.

일단 이 클래스의 특징을 살펴보겠습니다.

보통 java class 를 사용하려면 객체를 생성해야 합니다.

Test test = new Test();
이런식으로 new 을 이용하여 객체를 생성해줘야 하지만 String은 기본형처럼
객체를 생성하지 않고 사용할수 있습니다.

String str = "클래스를 바로 사용가능";

물론 아래처럼 new 를 이용해서 사용할수도 있습니다.
String str = new String("new 이용하여 사용가능");


그럼 StringBuffer 클래스의 사요방법을 알아보겠습니다.

StringBuffer sb = new StringBuffer();


반드시 new 연산자를 이용하여 객체를 생성후 사용가능합니다.
sb변수가 생성되면
append 메소드를 이용하여 계속 문자열을 추가할수 있습니다.

그리고 append이외에 다양한 메소드를 제공하고 있습니다.

append 메소드 사용법
sb.append("test");
sb.appedd("test1");

System.out.println("StringBuffer sb -> " + sb);

결과값
StringBuffer sb -> testtest1

 

자주 사용하는 메소드 setLength

sb에 있는 문자열을 전부 클리어시키는 효과를 가지고 있습니다.

sb.append("leesejin");
sb.setLength(0);
System.out.println("StringBuffer sb -> " + sb);

 

결과값

--------------------------------------------
StringBuffer sb ->

-----------------------------------------------

길이를 0으로 지정하면 sb에는 아무값도 가지지 않는 빈문자열만 가지게 됩니다.
출력하면 아무값도 찍히지 않게 됩니다.

 


이번에는 String 을 이용하여 문자열을 추가해보겠습니다.
String sb = "";

sb+= "test";
sb+= "test1";
System.out.println("sb -> " + sb);

결과값
sb -> testtest1

결과값은 둘다 같아서 원하는 결과값을 얻을수가 있습니다.
하지만 여기서 중요한건 바로 속도 차이죠.

StringBuffer 클래스를 사용하게 되면 객체를 한번 생성하게 되지만

String같은 경우
+= 연산자를 사용할때마다 매번 String클래스 객체를 생성하게 됩니다.

+= 연산자가 몇번 안된다면 속도 차이는 미비하겠지만
만약 += 연산자가 자주 하게 된다면 아무래도 속도차이가 날수밖에 없습니다.

 

아래 예제 소스를 보겠습니다.

 

---------------------------------------

public class Test {

 public static void main(String[] args) {

  StringBuffer sb = new StringBuffer();
  long startTime = System.currentTimeMillis();
  
  
  for (int i = 0; i < 9999; i++) {
   
   sb.append("i------------->" + i);
  }
  long endTime = System.currentTimeMillis();
  System.out.println("StringBuffer 실행 시간 " + (endTime - startTime));
  
  String str = "";
  long startTime1 = System.currentTimeMillis();
  
  for (int i = 0; i < 9999; i++) {
   str += "i------------->" + i;
  }
  long endTime1 = System.currentTimeMillis();
  System.out.println("String 실행 시간 " + (endTime1 - startTime1));  

 }
}
-----------------------------------------
-- 결과값
StringBuffer 실행 시간 10
String 실행 시간 3510

 

결과값을 보시면 아시겠지만 StringBuffer 를 사용했을때는 실행시간이 10이 걸렸지만
String을 사용했을때에는 3510 이 걸렸습니다.

여기서 for문의 숫자를 늘리면 늘릴수록 두 클래스의 속도차이는 더 벌어지게 됩니다.


그러므로 가급적 문자열 작업이 필요할때는 String보다는 StringBuffer 클래스를 사용하시는게 훨씬 효과적입니다.

참고로 java 에서는 문자열을 비교할때 ==를 사용하면 안됩니다.
문자열 비교는 equals메소드를 사용해야 합니다.

Stirng a = "bbb";
String b = "bbb";

a와 b가 같은 문자열을 가지고 있는지 비교하려면 반드시
if(a.equals(b)) {
System.out.println("a와 b가 같다");
}

자바 처음 접하시는 분들은 a == b 이런식으로 한다면 원하는 결과값을 얻을수가 없습니다.
if(a ==b) {
System.out.println("a와 b가 같다");
}

 

자바에서는 == 연산자는 주소값을 비교하는겁니다.
a 변수가 선언했을때의 주소와 b변수가 선언했을때의 주소는 당연히 다르겠죠.

 

여기까지 java String vs StringBuffer 비교에 대해 알아봤습니다.

반응형