1.String
String은 Immutable 하기 때문에 값을 변경할 수 없다. 따라서. concat()을 이용하여 값을 덧붙일 때 기존 String에 있던 값을 버리고 새로운 값을 할당한다. (concat이나 +를 사용하면 속도가 현저히 느려짐- 힙 메모리에 많은 임시 가비지가 생성되므로 힙 메모리 부족으로 애플리케이션 성능에 영향을 끼친다. )
2. StringBuffer, StringBuilder
String과 반대로 StringBuilder, StringBuffer는 가변성을 가지기 때문에 .append(), .delete()등의 api를 이용해서 동일 객체 내에 문자열을 변경하는 것이 가능하다.
멀티 쓰레드 환경에서 StringBuffer를 사용하여 값이 예상치 못하게 변경되는 것을 방지할 수 있다. (동기화를 지원하기 때문에)
그 이외에는 StringBuilder를 사용해주면 된다. 단일 스레드에서 StringBuilder가 성능면에서 뛰어나기 때문이다.
아래는 StringBuilder의 여러 메서드이다.
public static void main(String[] args) {
String s = new String("ABC");
s = s.concat(" 붙이기");
s = s + " 붙이기";
// String은 불변(immutable)하기 때문에
// 기존 것을 버리고 새로 할당하는 식으로 사용
StringBuffer sbuffer = new StringBuffer("stbf");
sbuffer.append(" 붙이기");
StringBuilder sbuilder = new StringBuilder("stbf");
sbuilder.append(" 붙이기");
// StringBuffer, StringBuilder는 변하기(mutable)하기 때문에
// 기존 것에서 append를 사용해서 값 변경 가능
sbuilder.append("붙이기"); // 삽입
sbuilder.insert(0, "ASDASD"); // 중간에 삽입
sbuilder.delete(3, 7); // 자르기
sbuilder.indexOf("ASDB"); // index 확인
sbuilder.substring(0, 4); // 자르기
sbuilder.length(); // 길이 확인
sbuilder.replace(0, 4, "CCCC"); // 글자 바꾸기(0부터 4번째 글자를 날리고 CCCC로 변경)
System.out.println(sbuilder);
System.out.println(sbuilder.indexOf("붙이기붙이기"));
System.out.println(sbuilder.substring(0, 4)); // substring 예제
System.out.println(sbuilder.reverse()); // 순서 뒤집기
System.out.println(sbuilder.length()); // length 예제
}
3. 결론
1) String : 문자열 연산이 적고, 멀티쓰레드 환경일 경우
2) StringBuffer : 문자열 연산이 많고 멀티스레드 환경일 경우에
3) StringBuilder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우에
https://ifuwanna.tistory.com/221
'Back-end > Java Language' 카테고리의 다른 글
람다식(Lamda expression) (0) | 2021.07.19 |
---|---|
Scanner (0) | 2021.07.05 |
0. BufferedReader, BufferedWriter, Scanner, StirngTockenizer (0) | 2021.07.03 |
X. GarbageCollection(가비지 컬렉션) (0) | 2021.06.10 |
입출력(I/O) (0) | 2021.06.07 |