본문 바로가기

JAVA

[JAVA] String / StringBuilder / StringBuffer 차이점

문자열 처리 문제에서 어떤 클래스를 사용해야 가장 효율적인가?🤔
를 고민하다가 본 글을 작성하게 되었다.

 

String과 StringBuilder, StringBuffer의 차이점

핵심 차이점 : String은 불변의 속성을 갖지만 StringBuilder와 StringBuffer는 가변성을 갖는다.

파생 차이점 : 문자열을 수정할 때, String은 새로운 문자열 객체를 만들고 기존 객체는 Gardage로 남겨놓는다.
따라서 수정이 빈번하게 일어날 경우 많은 Gardage가 생겨서 메모리 부족으로 어플리케이션 성능이 저하된다.
반면 StringBuilder와 StringBuffer는 동일한 객체에서 문자열을 변경하는게 가능하다.

❗결론 : 문자열을 자주 읽어들이는 경우 더 가벼운 String을 사용하면 더 성능이 좋다.
반면 문자열 추가,수정,삭제 등의 연산이 빈번하게 발생하는 경우 StringBuilder와 StringBuffer를 사용하는게 더 좋다.

 

 

 

StringBuilder와 StringBuffer의 차이점

StringBuilder와 StringBuffer은 쓰임과 메소드가 같다.
이둘의 가장 큰 차이점은 동기화 유무이다.
StringBuffer은 동기화를 지원하여 멀티 쓰레드 환경에서 안전하고 (thread-safe), StringBuilder은 동기화를 지원하지 않는다.

❗멀티 쓰레드 환경에서는 StringBuffer를, 그렇지 않은 경우 더 가벼운 StringBuilder을 쓰는게 좋다.
(내가 접할 코딩 테스트의 상황에서는 StringBuilder을 쓰는게 효율적)

 

⭐정리

  • String                :  문자열 연산이 적고 멀티쓰레드 환경일 경우
  • StringBuffer     :  문자열 연산이 많고 멀티쓰레드 환경일 경우
  • StringBuilder   :  문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우  

 

이미지 출처 & 참고 : [Java] String, StringBuffer, StringBuilder 차이 및 장단점 :: IfUwanna IT (tistory.com)

 

[Java] String, StringBuffer, StringBuilder 차이 및 장단점

Java 에서 문자열을 다루를 대표적인 클래스로 String , StringBuffer, StringBuilder 가 있습니다. 연산이 많지 않을때는 위에 나열된 어떤 클래스를 사용하더라도 이슈가 발생할 가능성은 거의 없습니다.

ifuwanna.tistory.com