09. 스트링 빌더 (StringBuilder) [ JAVA ]

duck-ach·2022년 7월 25일
0

JAVA

목록 보기
9/27

StringBuilder

StringBuilder는 말 그대로 String을 만드는 객체이며, StringBuilder로 변경한 다음 append()insert()등의 기능을 처리할 수 있으며, java.lang.StringBuilder 에 소속되어 있다.

사용법

append()를 사용하여 StringBuilder에 값을 저장한다.
저장되는 형태는 append(값) + append(값)인데, "값" + "값" 형태로 저장되어 값을 서로 붙인다.

StringBuilder sb = new StringBuilder();
		sb.append(1);
		sb.append(true);
		sb.append('T');
		sb.append(3.14);
		sb.append("hello");
		System.out.println(sb); // 1trueT3.14hello

StringBuilder를 선언한 후, 각 append()에 맞는 데이터타입을 모두 받아서 합쳐서 출력해 준다.
문자열 연산 "안녕" + "하세요" = "안녕하세요"의 상위버전 느낌이다.

포함된 문자 불러오기

만약 hello가 포함되었는지 확인하기위해

sb.contains("hello");

이렇게 하면 StringBuilder가 이미 저 문장들은 한 문자열로 만들어 놓았기 때문에 "hello"라는 데이터가 따로 있지않아 코드가 실행되지 않는다.

대신 인덱스로 글자를 가져올 수 있다.

System.out.println(sb.charAt(1)); // t
System.out.println(sb.substring(0, 1)); // 1

위의 코드에 이렇게 코드를 짜주면 이렇게 인덱스 명령대로 출력된다.

동등비교

만약 문자열 비교인 equals()를 이용하여 StringBuilder를 이용하여 만든 "1trueT3.14hello" 와 문자열 "1trueT3.14hello"를 비교하면 true가 나올까?

System.out.println(sb.equals("1trueT3.14hello")); // false

답은 false가 나온다. 왜냐하면 StringBuilder는 String이 아니고 문자열을 만드는 기계, Builder이기 때문이다.

그래서 항상 StringBuilder로 만든 문자열은 반드시 마지막에 String으로 변환 시켜주어야 한다.

String result = sb.toString();
System.out.println(result.equals("1trueT3.14hello")); // true

성능비교

간단하게 a-z를 출력하는 코드를 작성하여 단순히 스트링을 합치는 + StringBuilder의 성능을 비교해보았다.

String+String

String alphabet1 = "";
long begin1 = System.nanoTime();
	for(char ch='a'; ch<='z'; ch++) {
		alphabet1 += ch;
	}
	long end1 = System.nanoTime();
    
	System.out.println((end1 - begin1) + " " + alphabet1); // 154285 abcdefghijklmnopqrstuvwxyz

StringBuilder

StringBuilder sb2 = new StringBuilder();
long begin2 = System.nanoTime();
	for(char ch='a'; ch<='z'; ch++) {
		sb2.append(ch);
	}
	long end2 = System.nanoTime();
	String alphabet2 = sb2.toString();
	System.out.println((end2 - begin2) + " " + alphabet2); // 33300 abcdefghijklmnopqrstuvwxyz

결론 :

  • String은 불변(immutable)하기 때문에 + 사용 시 기존값을 버리고 새로 할당해서 수행하기 때문에 나중에 코드가 늘어날 경우 급격히 느려진다.
  • StringBuilder는 변(mutable)하기 때문에 한번에 데이터를 받아 합쳐서 처리하기 때문에 빠르다.
  • 코드가 간단할 때는 상관없지만, 보통 1000번 이상 사용할 경우 StringBuilder가 작업을 처리하는데 훨씬 더 적은 시간을 소요한다. ( 성능이 더 좋다. )

StringBuilder, StringBuffer의 주요 메소드

append(값)
StringBuilder, StringBuffer 뒤에 값을 붙인다.
insert(인덱스, 값)
특정 인덱스부터 값을 삽입한다.
delete(인덱스, 인덱스)
특정 인게스부터 인덱스까지 값을 삭제한다.
indexOf(값)
값이 어느 인덱스에 들어있는지 확인한다.
substring(인덱스, 인덱스)
인덱스부터 인덱스까지 값을 잘라온다.
length()
길이를 확인한다.
replace(인덱스, 인덱스, 값)
인덱스부터 인덱스까지 값으로 변경한다.
reverse()
글자 순서를 뒤집는다.

profile
자몽 허니 블랙티와 아메리카노 사이 그 어딘가

0개의 댓글