자바에서 문자열 결합에는 세 가지 방법이 존재한다.
- + 연산자 사용
- String 클래스의 concat 함수 사용
- StringBuilder/StringBuffer 클래스 사용
어떤 방법을 사용하는 것이 성능에 유리할까?
일반적으로 다음과 같이 얘기한다.
"반복적으로 사용할 것이 아니다" → 위 세 가지 중 어떤 방법을 사용하든 실행 시간에는 크게 차이 나지 않음
"문자열 결합이 반복적으로 일어난다" → StringBuilder/StringBuffer를 사용하는 것이 가장 효율적임
StringBuilder/StringBuffer가 성능에서 유리한 이유
- + 연산자나 String 클래스의 concat 함수를 사용하는 경우 루프의 횟수만큼 객체나 배열의 생성 처리를 한다.
- 루프가 총 X번 돈다면, X개의 문자열을 보관할 배열과 최종 결과를 반환할 배열까지 총 X+1개의 배열을 메모리에 만든다.
- 또한 각 루프마다 배열의 내용을 복사하는 처리도 발생한다.
- StringBuilder/StringBuffer도 내부적으로 문자열을 배열로 보유하고는 있지만 위 방법과 다르게 여유 있는 배열을 만들어 확보하고 있다.
- 추가로 공간이 필요 한 경우 여유의 공간만큼 확장되기에 메모리를 확보하는 횟수가 현저히 적다.
단, StringBuilder와 StringBuffer도 아래와 같은 용도의 차이가 있다.
- StringBuilder
- 로컬 변수나 여러 스레드로부터 액세스 되지 않는 경우
- StringBuffer
- 여러 스레드로부터 사용 될 가능성이 있는 경우
'자바 개발자되기' 카테고리의 다른 글
Spring @Async - 비동기 처리 (0) | 2020.12.06 |
---|---|
자바 스터디 3주차 : 연산자 (0) | 2020.11.27 |
자바 스터디 2주차 : 자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법 (0) | 2020.11.20 |
캐싱 정책 Inline Cache, Cache Aside (0) | 2020.11.18 |
비관적 락, 낙관적 락 (0) | 2020.11.12 |