학습(구)/Java(구)

자바 성능 튜닝 - 문자열 처리

잉아당 2021. 4. 30. 01:25
728x90

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