개발/Java

String, StringBuffer, StringBuilder, 문자 리터럴 비교

ksy0314 2024. 3. 11. 15:19

 

코딩 테스트를 진행하던 중

반복적인 문자 연산 문제가 나왔다.

 

String의 경우 문자열 연산시 새로운 String 객체를 생성하기에
오버해드가 크다 생각하여 StringBuffer를 사용해 보았다.

 

1
2
3
4
5
6
7
8
9
10
11
import java.util.Scanner;
 
public class Solution {
    public static void main(String[] args) {
        //String output = "a" + "b" + "c";
        StringBuffer output = new StringBuffer("a");
        output.append(b);
        output.append(c);
        System.out.println(output);
    }
}
 
 

 

그런데 왠걸 연산에 소모되는 시간이 오히려 증가된것이 아닌가?

 

 

이유는 다음과 같았다.

 

 

Java에서 문자열 리터럴 간의 연산은

String 객체를 생성하여 수행하지 않고

컴파일 시간에 최적화되어 처리된다는 것이였다.

 

 

문자열 리터럴간의 연산은 String간의 연산과 다르게 처리된다는것이다.

 

 

오버헤드(시가, 메모리)를 비교해보자면 다음과 같다

문자 리터럴 < StringBuffer, StringBuilder String

 

결론 : 

최고의 성능을 내고 싶다면

문자 리터럴간의 연산으로 처리하자.