String 클래스는 메모리에 많은 부하를 주는 클래스 입니다. 새로운 내용을 추가 할 때마다 객체를 지속적으로 생성하기 때문입니다. 객체를 지속적으로 생성하면 메모리도 낭비될 뿐더러 GC가 사용하지 않는 객체를 계속 삭제하기 때문에 CPU와 시간을 많이 소모하게 됩니다.
그러므로 StringBuffer 나 StringBuilder 클래스를 메모리 사용량을 줄이는 것이 좋습니다.
StringBuffer : 스레드에 안전하게 설계되어 있으므로 여러 개의 스레드에서 하나의 StringBuffer 객체를 처리해도 전혀 문제가 되지 않습니다.
StringBuilder는 단일 스레드에서 안정성을 보장하므로 여러 스레드에서 하나의 StringBuilder 를 처리하면 문제가 발생합니다.
CharSequence : 인터페이스로써 String, CharBuffer, StringBuffer, StringBuilder 가 해당 인터페이스를 구현하고 있으며 StringBuffer나 StringBuilder로 생성한 객체를 전달할 때 사용됩니다. 이 인터페이스를 이용하는것이 toString()을 이용하여 넘겨주는것 보다 메모리 효율에 좋습니다.
StringBuffer.append() 메서드를 사용할 때 append("ABCD" + "BCAE")으로 사용할 경우 StringBuffer를 사용하는 이유가 없기 때문에 조심해야 합니다.
<사용하기 좋은 조건>
String : 짧은 문자열을 더할 경우 사용
StringBuffer : 스레드에 안전한 프로그램이 필요할 때나 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우 사용 - static으로 선언한 문자열 변경 혹은 singleton으로 선언된 클래스에 선언된 문자열
StringBuilder : 스레드에 안전한지의 여부와 전혀 관계없는 프로그램을 개발할 때 사용
'학습(구) > Java(구)' 카테고리의 다른 글
자바 성능 튜닝 - 조건/반복문 (0) | 2021.06.04 |
---|---|
자바 성능 튜닝 - 컬렉션 (0) | 2021.05.07 |
자바 성능 튜닝 - 분석 툴 (0) | 2021.04.28 |
자바 성능 튜닝 - 디자인 패턴 (0) | 2021.04.27 |
JavaFx (0) | 2021.04.12 |