티스토리 뷰

JAVA 문자열 연결 방법

  • concat메소드
  • StringBulider 객체
  • StringBuffer 객체
  • "+" 연산자

String.concat()

String 클래스에는 문자열을 이어주는 concat 메소드가 있습니다.

String abc = "A".concat("B").concat("C"); // ABC

Java 에서 String 은 불변(immutalble) 한 특성을 가집니다. 따라서 새로운 문자열을 더할 때마다 새로운 인스턴스를 생성하기 때문에 성능 상이나 속도 면에서 비효율적입니다. 예제처럼 간단한 경우라면 모를까 보고서를 생성하는 등 문자열 처리가 많은 작업을 할수록 이슈가 될 수 있습니다.

 

StringBuilder

String sb = new StringBuilder()
  .append("A")
  .append("B")
  .append("C").toString();

내부적으로 문자열을 가지고 문자열을 변경하는 메소드를 제공합니다. Java 에서 String 은 불변(immutalble) 하기 때문에 수정 시에 새로운 인스턴스를 만들게 됩니다. 하지만 StringBuilder 를 사용하면 문자열을 계속해서 앞뒤로 덧붙이거나 중간에 문자열을 삽입 삭제하는 등 다양한 연산이 가능합니다.

 

+ 연산자

"+" 연산자로도 문자열을 붙일 수가 있습니다. + 연산자의 경우 Java 1.5 이전에는 concat 메소드와 동일하게 새로운 String 인스턴스를 생성했지만, Java 1.5 부터는 내부적으로 StringBuilder 로 변환해서 처리하기 때문에 StringBuilder 와 동일하다고 보시면 됩니다. 간단한 경우에 StringBuilder 보다 훨씬 가독성이 좋으니 + 연산자를 사용하는게 좋습니다.

// StringBuilder 와 동일
String abc = "A" + "B" + "C";	// ABC

 

+ 연산자 그리고 StringBuilder

그렇다면 StringBuilder 를 쓸 이유가 없을까요? 아닙니다.
간단한 문자열 조합은 + 연산으로 충분하지만 만들 때마다 StringBuilder 인스턴스를 생성합니다. 따라서 반복문에서 문자열을 조합하는 것처럼 StringBuilder 인스턴스를 생성해서 여러 작업을 하는 경우에는 StringBuilder 를 쓰는게 좋습니다.

List<String> list = Arrays.asList("foo", "bar", "baz", "qux");

StringBuilder sb = new StringBuilder();
for (String s : list) {
  sb.append(s);
}
System.out.println(sb);

다음과 같이 반복문 상에서 문자열 조합에 대한 성능을 비교해볼 수 있습니다.

https://pellegrino.link/2015/08/22/string-concatenation-with-java-8.html

StringBuilder 그리고 StringBuffer

두 클래스의 차이는 multithreaded 환경에서 동기화 보장이 되어있느냐의 차이입니다. multithreaded 환경에서는 StringBuffer 를 사용하셔야 합니다.

 

결론

  1. 기본적으로 + 연산자를 쓰자.
  2. multithreaded 환경에서는 StringBuffer
  3. 반복문에서의 작업이나 다양한 문자열 작업 처리는 StringBuilder 또는 StringBuffer

참고

https://futurecreator.github.io/2018/06/02/java-string-concatenation/

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함