티스토리 뷰

자바에서 String 타입을 붙일 때 사용하는 방법은 다양하다. 기본 연산자인 +를 비롯하여 StringBuilder, concat 모두 들어보거나 써본 용어일 것이다. 근데 동작 방식에 어떤 차이가 있을까?

 

먼저 결과값으로만 비교해보자.

public class Main {
	public static void main(String[] args){    	
        String str1 = "Hello";
        String str2 = "World!";
        
        // '+'
        String result1 = str1 + str2;
        
        // concat()
        String result2 = str1.concat(str2);   
        
        // StringBuilder
        StringBuilder result3 = new StringBuilder();
        result3.append(str1);
        result3.append(str2);
        
        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
    }
}

 

출력값은 아래와 같다.

HelloWorld!
HelloWorld!
HelloWorld!

 

모두 동일하게 나온다!! 대체 뭔차이지? 그냥 아무거나 골라쓸랭.. 왜 여러개를 만들걸까 는 모두 내생각이다. 결정적으로 결과값은 모두 동일하지만 성능에 차이가 있다. 또한 초기값에 따라 오류가 날 수 있다.


Concat

concat 명령어를 쓸 경우 초기값이 null이면 안된다.

String str1 = null;
String result = str1.concat("Hi");
System.out.println(result);

// 결과
java.lang.NullPointException

 

concat 명령어는 더하려는 값을 new String()으로 새로 만든다. 따라서 문자열을 계속해서 붙인다고 가정하면, 붙일 때마다 주소값을 할당받게 되는 것이다.

 

StringBuilder

내가 StringBuilder 를 쓸 때 편리했던 점은 초기화를 안해도 된다는 것이었다.

StringBuilder result = new StringBuilder();
result.append("Hi");

System.out.println(result);

// 결과
Hi

 

+ 연산자

자바 버전에 따라 다른데, 1.5 이전에는 concat을 이용하는 방식과 같고 1.5 이후에는 StringBuilder를 이용하는 방식과 같다.

 


참고사이트

https://devdy.tistory.com/9