java String, StringBuffer, StringBuilder의 차이

자이로 체펠리·2021년 6월 14일
0
post-thumbnail

String

자바에서 문자열 기본 데이터 타입은 String입니다. 단순히 char[]를 사용하지 않고 String이라는 class를 사용한 이유는 String과 관련하여 다양한 메서드를 사용할 수 있기 때문입니다.
이번 주제에서 String, StringBuffer, StringBuilder의 차이를 알기 위해 예제를 사용해 알아보겠습니다.

String str = "hello";
str += " world";
System.out.println(str);

다음의 코드를 실행하면 콘솔에 hello world가 출력될 것입니다. 단순한 예제이지만 메모리의 변화를 살펴보면 그렇게 간단하지 만은 않습니다. 왜냐하면 String은 immutable 즉 변하지 않는 변수이기 때문입니다. 뭔소린가 하면 str += " world"는 기존 str("hello") 뒷줄에 " world"를 추가해준것이 아니라 새로운 String인 hello world를 메모리에 추가하고 그 주소를 str에 할당해 주는 것입니다.

기존 hello는 객체와의 링크가 끊어져서 heap에 머물다 GC에 의해 삭제됩니다.

StringBuffer, StringBuilder

StringBuffer, StringBuilder와 String의 핵심적인 차이는 immutable이 아니라는 것입니다. 즉 이 둘은 append라는 메서드를 사용해서 확장과 delete를 사용해 축소가 가능합니다. 그렇기 때문에 문자열에 수정이 자주 가해지는 코드에서는 StringBuffer, StringBuilder이 String 보다 메모리 관리와 속도에서 유리합니다.

그렇다면 StringBuffer과 StringBuilder는 어떤 차이가 있을까요? 가장 큰 차이점은 동기화의 지원 여부입니다 StringBuilder는 동기화를 지원하지 않기 때문에 multi thread에서 안정성이 낮지만 빠르다는 장점이 있으며, StringBuffer는 multi thread 환경에서 안정성이 높다는 장점이 있지만 반대로 느리다는 단점을 가지고 있습니다.

참고: https://ifuwanna.tistory.com/221

profile
"경의를 표해라. 경의를 갖고 회전의 다음 단계로 나아가는 거다…… [LESSON 4] 다."

0개의 댓글