티스토리 뷰
작고 크기가 고정된 객체의 문자열은 문자열 연결 연산자(+)를 사용해도 되지만,
많은 문자열을 연결할 때는 StringBuilder를 사용하자
🔎 문자열 연결 연산자(+) vs StringBuilder, append()
문자열 연결 연산자(+)는 여러 문자열을 하나로 합쳐주는 편리한 수단이다.
한 줄짜리 출력 값이나 작고 크기가 고정된 객체의 문자열 표현을 만들 땐 편리하고 좋지만,
문자열 연결 연산자로 문자열 n개를 잇는 시간은 n^2에 비례한다.
즉, 엄청엄청엄청엄청 느리다,,,,,,
예를 들어, 다음과 같이 청구서의 품목(item)을 전부 하나의 문자열로 연결하는 코드를 작성해보자.
/* 문자열 연결 연산자(+) 사용 */
public String statement() {
String result = "";
for (int i=0 ; i<numItems() ; i++){
result += lineForItem(i); // 문자열 연결
}
return result;
}
/* StringBuilder사용 */
public String statement2() {
StringBuilder sb = new StringBuilder(numItems() * LINE_WIDTH);
for(int i=0 ; i<numItems() ; i++){
sb.append(lineForItem(i));
}
return sb.toString();
}
품목이 100개이고, lineForItem이 길이 80인 문자열을 반환한다면 statement2()가 statement()보다 무려 6.5배나 빨랐다.
statement 메서드의 수행 시간은 품목 수의 제곱이 비례해 늘어나고,
statement2 메서드의 수행 시간은 선형으로 늘어난다.
이 말은 즉,, 품목 수가 늘어나면 늘어날수록 성능 격차도 점점 더 벌어진다.
📚 정리!
성능에 신경 써야 한다면,
많은 문자열을 연결할 때는 문자열 연산자(+)를 피하고, 대신 StringBuilder를 사용하자.
문자 배열을 사용하거나, 문자열을 연결하지 않고 하나씩 처리하는 방법도 있다.
728x90
'Programming > Effective Java' 카테고리의 다른 글
[이펙티브자바] Item 64. 객체는 인터페이스를 사용해 참조하라 (0) | 2022.07.27 |
---|---|
[이펙티브자바] Item 62. 다른 타입이 적절하다면 문자열 사용을 피하라 (0) | 2022.07.27 |
[이펙티브자바] Item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 (0) | 2022.07.21 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- docker-compose
- BFS
- dfs
- 알고리즘
- 완탐
- 운영체제
- bruteforce
- Retrofit2
- springboot
- DevOps
- 백준
- subset
- BOJ
- 아이템61
- 조합
- cicd
- Container
- Java
- 토큰기반인증
- 아이템60
- 그래프탐색
- 이펙티브자바
- OS
- 완전탐색
- docker
- IMAGE
- EffectiveJava
- 순열
- dp
- 아이템59
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함
250x250