문자열 합치기 방식 비교 (concat VS "+" VS StringBuilder VS StringBuffer)

2024. 9. 5. 15:27Lang/JAVA

내가 작성한 로직중 "+"로 문자열을 합친 부분이 있었는데 

코드 리뷰를 받던 중 +로 합치지말고 concat으로 합치라는 말을 들었다.

 

하지만 지적하신분이 "왜?" 라는 질문에 대답을 애매하게 "메모리 관리면에서 그게 좋다고 들었다"라고 하셔서

직접 알아봤다.

 


1. concat()

- String 클래스에서 기본 제공

- 동작방식 : 합친 문자열을 String으로 재생성 ( -> 문자열을 추가할때마다 새로운 인스턴스가 할당되기에 성능, 속도 모두 좋지 않다.)

- 사용시기 : 되도록 지양할 것!


2. "+" 연산자

- 동작방식 : 

     JDK 1.5 미만 => 문자열 추가시 새 인스턴스에 할당 

     JDK 1.5 이후 => StringBuilder로 변환해서 처리

( StringBuilder 객체 생성 -> append()로 문자열 추가 -> .toString() 과정)

- 사용시기 : 간단한 문자열 합산에 사용


3. StringBuilder

- java.lang 클래스에서 제공

- 일반적인 String과 달리 수정이 가능함

- 동작방식 : 수정가능한 StringBuilder 객체 생성 -> append()로 문자열 추가 -> .toString()으로 String 객체로 변환

- 사용시기 : 반복문 등 반복적인 문자열추가 나 복잡한 문자열 추가에 사용


4. StringBuffer

- StringBuilder와 호환 가능

- StringBuilder와의 차이점 :

  동시성 제어 상대적인 동작 속도
StringBuilder 불가능 (동기화 보장 X) 빠름
StringBuffer  가능 (** thread-safethread-safe) 느림

     ( ** thread-safethread-safe : 동시에 여러 스레드가 접근해도 프로그램의 동작이 문제가 없도록 안전하게 설계된 것 )

 

- 사용시기 : 멀티쓰레드 이용시