LinkedIn

자바 문자열 결합

2020. 11. 23. 19:16 | 자바 개발자되기

자바에서 문자열 결합에는 세 가지 방법이 존재한다.

  1. + 연산자 사용
  2. String 클래스의 concat 함수 사용
  3. StringBuilder/StringBuffer 클래스 사용

어떤 방법을 사용하는 것이 성능에 유리할까?

 

일반적으로 다음과 같이 얘기한다.

 

"반복적으로 사용할 것이 아니다" → 위 세 가지 중 어떤 방법을 사용하든 실행 시간에는 크게 차이 나지 않음

"문자열 결합이 반복적으로 일어난다" → StringBuilder/StringBuffer를 사용하는 것이 가장 효율적임

 

StringBuilder/StringBuffer가 성능에서 유리한 이유

  • + 연산자나 String 클래스의 concat 함수를 사용하는 경우 루프의 횟수만큼 객체나 배열의 생성 처리를 한다.
    • 루프가 총 X번 돈다면, X개의 문자열을 보관할 배열과 최종 결과를 반환할 배열까지 총 X+1개의 배열을 메모리에 만든다.
    • 또한 각 루프마다 배열의 내용을 복사하는 처리도 발생한다.
  • StringBuilder/StringBuffer도 내부적으로 문자열을 배열로 보유하고는 있지만 위 방법과 다르게 여유 있는 배열을 만들어 확보하고 있다.
    • 추가로 공간이 필요 한 경우 여유의 공간만큼 확장되기에 메모리를 확보하는 횟수가 현저히 적다.

 

단, StringBuilder와 StringBuffer도 아래와 같은 용도의 차이가 있다.

  • StringBuilder
    • 로컬 변수나 여러 스레드로부터 액세스 되지 않는 경우
  • StringBuffer
    • 여러 스레드로부터 사용 될 가능성이 있는 경우