String은 immutable(불변의)한 객체다.
String 문자열을 더하면 새로운 String 객체가 생성되고, 기존 객체는 버려진다.
그러므로, 계속 하나의 String을 만들어 계속 더하는 작업을 한다면,
계속 쓰레기를 만들게 된다.
ex1)
String text = "Hello";
text = text + " world"; //첫번째 text 객체는 쓰레기가 된다.
자바의 가비지 컬렉션이 계속 일을 하게끔 되므로 성능저하를 일으킨다.
이런 단점을 보완하기 위해서 나온 클래스가 StringBuffer와 StringBuilder다.
이 둘의 간단한 차이점은,
StringBuffer | Stringbuilder | |
Thread Safe | win | lose |
Speed | lose | win |
ex2)
StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" world");
물론 JDK 5 이상에서는 String의 더하기 연산을 할 경우,
컴파일할 때 자동으로 StringBuilder로 변환해 준다.
그러나, for 루프와 같이 반복 연산에서는 자동으로 변환해주지 않는다.
사용법 :
1. 일반적인 하나의 메소드 내에서 문자열을 생성하여 더할 땐, StringBuilder를 사용.
2. 어떤 클래스에 문자열을 생성하여 더하기 연산을 위한 인스턴스 변수가 있고
여러 쓰레드에서 이 변수를 동시에 접근하는 일이 있을 땐, 반드시 StringBuffer를 사용.
*** 자바의 신(이상민 저)을 공부한 내용 중에 기억해야 할 개념들을 정리해 놓은 글 입니다.***
'Java' 카테고리의 다른 글
[JAVA] 8. JVM의 개념과 역할 (0) | 2021.04.30 |
---|---|
[JAVA] 7. 자주 쓰는 어노테이션(@) 종류 (0) | 2021.04.29 |
[JAVA] 5. 일부 완성되어 있는 abstract 클래스 (0) | 2021.04.29 |
[JAVA] 4. Static의 쓰임새와 Static 블록 (0) | 2021.04.29 |
[JAVA] 3. 오버로딩(overloading) vs 오버라이딩(overriding) (0) | 2021.04.29 |