티스토리 뷰

JAVA(프로그래밍)

java String vs StringBuffer 비교

알 수 없는 사용자 2018. 7. 26. 00:43

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 비교에 대해 알아봤습니다.

댓글