차이점
String 과 StringBuffer(StringBuilder), 두 클래스 모두 문자열을 담고 연산하는 것인데
차이가 뭐지? 성능이 어떻게 다르지? 궁금했던 분들에게 그 차이점을 스윽 정리해드리고자 한다!
아래 표를 보면 된다 !
String | StringBuffer | StringBuilder |
문자열을 저장하고 관리하는 클래스 | ||
immutable (불변) | mutable (가변) | |
new 연산을 통해 생성되면 그 인스턴스의 메모리 공간은 절대 변하지 않는다. 문자열 연산을 했을 때, 메모리 공간이 변하는 것이 아닌 새로운 String 객체를 만드는 것이다. |
문자열 연산에 있어서 new로 객체 생성을 한번 한 후, 연산이 필요할 때 크기를 변경시켜 문자열을 변경한다 |
|
동기화(Synchronized)를 지원한다 멀티스레딩 환경에서 동기화 가능하다 |
동기화(Synchronized) 지원하지 않아 멀티스레딩 환경에서 사용불가능하다 |
표를 슥- 읽고 왔다면 한번 살표볼까?
String str = "Hello";
str += " world";
str += "!!!";
위 코드와 같이 연산을 했을 때, 서로 다른 객체를 계속 생성하게 되는 것이다.
이렇게 새로운 문자열이 만들어지면 기존의 문자열은 가비지 콜렉터에 의해 제거되야 하는 단점(언제 제거될지 모름)이 있고,
이러한 문자열 연산이 많아질 때 계속해서 객체를 만드는 오버헤드가 발생하므로 성능이 떨어질 수 밖에 없다.
대신 String 클래스의 객체는 불변하기 때문에 단순 참조의 경우 String 클래스가 StringBuffer(StringBuilder)보다 좋은 성능을 보인다.
String과 new String의 차이는 아래 링크를 참고하세요
Link : https://haenny.tistory.com/18
반면 StringBuffer와 StringBuilder 클래스는 문자열 연산에 있어서 클래스를 한번만 만들고(new), 연산이 필요할 때 크기를 변경시켜서 문자열은 변경하므로 문자열 연산이 자주 있을 때 사용하면 성능이 좋다.
사용방법은 다음과 같다.
StringBuffer sb = new StringBuffer();
sb.append("hello");
sb.apeend("world");
String과는 다르게 sb라는 StringBuffer 객체에 append, insert, delete 등의 메소드를 통해 StringBuffer객체가 가지고 있는 문자열 변경이 가능하다.
그렇다면 StringBuffer와 StringBuilder의 차이는 ??
위 표에서 본 것과 같이 StringBuffer는 동기화 지원, StringBuilder는 동기화를 지원하지 않는 차이를 보인다.
결론 !!!!!
String | StringBuffer | StringBuilder | |
적합한 환경 | 문자열 연산이 적고 단순 참조 경우 |
문자열 연산이 많고, 멀티쓰레드 환경 |
싱글쓰레드나 쓰레드를 신경쓰지 않아도 되는 환경 |
성능 | String < StringBuffer < StringBuilder 단, 안정성을 위해서는 StringBuffer를 많이 사용한다. |
'JVM > Java' 카테고리의 다른 글
[Error] DB Connection 종료 에러 해결: No operations allowed after statement closed (2) | 2019.10.24 |
---|---|
[Java] StringBuffer append("a"+"b") 메모리는 어떻게 할당될까? (0) | 2019.08.01 |
[Java] String과 new String 차이 (0) | 2019.07.30 |
[Java] JAXB 활용한 Java 객체의 XML 변환 방법 (0) | 2019.07.09 |
[Java] 개발자라면 꼭 필요한 로그관리! Logger 사용 및 log4j2.xml 설정 방법 (0) | 2019.06.22 |
댓글