춤추는 개발자

String, StringBuilder, StringBuffer의 차이? 본문

Developer's_til/그외 개발 공부

String, StringBuilder, StringBuffer의 차이?

Heon_9u 2020. 10. 1. 00:26
728x90
반응형

1. String 과 StringBuilder, StringBuffer

String과 StringBuilder, StringBuffer의 차이는 동일 객체 내에서 변경이 가능한지의 여부입니다. 먼저, String은 불변의 속성을 갖습니다.

String str = "hello";
str += " world";

str에 world를 추가할 경우, str은 "hello world"라는 새로운 메모리 영역을 가리키게 됩니다. 이때, "hello"는 Garbage로 남아 GC에 의해 사라지게 됩니다. 만약, 문자열의 수정이 빈번할 경우 힙 영역에 임시 Garbage가 쌓여서 메모리 부족이 발생할 수 있습니다.

StringBuilder sb = new StringBuilder();
sb.append("a");
sb.append("b");

String str = sb.toString();

반면에, StringBuilder, StringBuffer는 가변성을 가지고 .append(), .delete() 등의 메소드로 동일 객체내에서 수정이 가능합니다. 

 

2. StringBuilder과 StringBuffer

둘의 가장 큰 차이점은 동기화의 유무입니다.

StringBuilder은 단일 스레드, StringBuffer는 멀티 스레드에서 안전하다는 특징이 있습니다.

 

📢 추가사항

 JDK 1.5버전 이후로 String의 + 연산은 StringBuilder로 변환되어 append() 메서드를 사용하도록 변환됐습니다. 하지만, String의 + 연산은 반복문이나 여러 줄에 걸쳐서 사용하는 경우, 매번 StringBuilder로 변환하기 때문에 비효율적입니다. 즉, 한줄로 선언한 경우에만 성능 최적화가 이루어진다.

 

 

728x90
반응형