티스토리 뷰
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);
다음과 같이 반복문 상에서 문자열 조합에 대한 성능을 비교해볼 수 있습니다.
StringBuilder 그리고 StringBuffer
두 클래스의 차이는 multithreaded 환경에서 동기화 보장이 되어있느냐의 차이입니다. multithreaded 환경에서는 StringBuffer 를 사용하셔야 합니다.
결론
- 기본적으로 + 연산자를 쓰자.
- multithreaded 환경에서는 StringBuffer
- 반복문에서의 작업이나 다양한 문자열 작업 처리는 StringBuilder 또는 StringBuffer
참고
https://futurecreator.github.io/2018/06/02/java-string-concatenation/
'Project > JAVA&Jsp' 카테고리의 다른 글
변수 표기법 (0) | 2021.02.10 |
---|---|
JAVA 문자열 구분자 붙이기[ Java StringJoiner ] (0) | 2020.08.20 |
JAVA 스트림 Stream 사용방법 (0) | 2020.08.20 |
[JAVA] Map에서 키나 값이 있는지 없는지 확인(containsKey,containsValue) (0) | 2020.08.13 |
JAVA 진수변환 (0) | 2020.08.13 |
- Total
- Today
- Yesterday
- Intellj들여쓰기
- 마이바티스CamelCase
- letsencrypt
- Letsencrypt wildcard
- SSL
- Letsencrypt+nginx
- camelcase
- Letsencrypt wildcard auto renew
- 마이바티스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |