JAVA 문자열 붙이기

SangHyun-Park·2022년 2월 16일
0

String.concat()

String a = "he";
String b = "llo";
String newString = a.concat(b);

String 객체를 이용해 문자열을 붙이는 방식, 내부적으로 기존의 객체에 붙이는 방식이 아니라 새로운 객체를 생성하는 방식을 사용하므로 성능이나 속도 측면에서 비효율적임

String 객체와 +연산자

String a = "he";
String b = "llo";
String newString = a+b;

jdk 1.5 이전에는 내부적으로 concat() 메소드를 이용해 새로운 인스턴스를 생성해 새로운 객체를 반환하도록 했지만

이후에는 StringBuilder 객체로 변환 -> append() -> toString() 의 방식으로 바뀌었다.

StringBuilder / StringBuffer

StringBuilder sb = new StringBuilder();
sb.append("he").append("llo");
StringBuffer sb2 = new StringBuffer();
sb2.append("he").append("llo");

이 두가지 객체와 String 객체와의 가장 큰 차이점은 mutable 하다는 것이다.

String 객체는 내부적으로 새로운 객체를 생성하는 반면 StringBuilder 와 StringBuffer 는 하나의 객체로 문자열을 추가, 삭제가 가능하다.

다만 StringBuffer 는 multi-thread 상황에서 thread-safe 를 보장(동기화 보장)하기 때문에 속도 측면으로만 보면 StringBuilder 가 조금 더 빠르다.

추가적으로 백준 15663번 문제에서 내부적으로 StringBuilder 를 생성하는 + 연산자와 같이 StringBuilder 객체를 매 시행시마다 생성하는 방식으로 구현해서
각각의 방식으로 구현했을 때 속도의 차이가 있을까 궁금해서 따로 제출해보니 결과는 StringBuilder 객체를 매번 생성하는게 + 연산자보다 빨랐다.


유의미한 시간 차이인지는 모르겠으나 아무래도 + 연산자가 해석되는 과정에서 소요되는 시간이 있으니 조금 더 느릴 수 있겠다는 결론을 내렸다.

profile
https://ppaksang.tistory.com/ 옮겼습니다 !!

0개의 댓글