String, , Stringbuffer , Stringbuilder 의 성능 차이에 대해서 알아보자
1. String
먼저 String 같은 경우는 immutable 하다.
이는 변하지 않는다는 뜻인데,
예를 들어 우리가 + 연산자를 이용해서 문자열을 더할때
String str1 = "Hello" ;
String str2 = "World";
str 1 = str1 + str2;
를 할경우 실질적으로 str1 의 값이 str1 + str2 로 합쳐진 값이 바로 저장되는 것이 아니라.
new String(str1 + str2 ) 의 형태로 새롭게 인스턴스가 생성되어 저장된다.
따라서 반복문 안에서 String의 값을 변경할때 위처럼 사용하면,
성능이 떨어지게 된다.
2. Stringbuffer, Stringbuilder
Stringbuffer 와 Stringbuilder 는 둘다 mutable 하다.
차이점이 있다면 Stringbuffer는 synchronized(동기화 지원)를 지원하고,
Stringbuilder는 하지 못하는데,
이는 multi thread 환경에서 사용하기 적합하냐 안하냐 차이이다.
Stringbuffer 와 Stringbuilder를 이용해 문자열을 더해주면
.append("Hello").append("world")
실제 같은 메모리 주소상에 문자열값이 변해서 저장이 된다.
참고로 stackoverflow 에서 찾아본 결과
JDK 1.5 이상에서는
1. 처럼 String 의 문자열을 더해도 컴파일러가
Stringbulider 로 변환하여 최적화를 시켜주는데
간단한 연산은 특별히 문제가 없지만
반복 연산에서는 Stringbuilder객체가 계속해서 생성되므로 여전히 성능상으로는
좋지 않으니 환경에 맞게 Stringbuilder 또는 Stringbuffer를 사용하면 되겠다.
참고: https://stackoverflow.com/questions/2971315/string-stringbuffer-and-stringbuilder
'공부방 > 알아두면 좋은 지식' 카테고리의 다른 글
JIT Compiler, AOT Compiler (0) | 2019.07.12 |
---|
행복한 코딩을 위하여!
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!