공통 특징은 String을 저장하는 클래스이다 그러나 여러 다른 특징들을 가지고 있다.
String
String은 두 가지 생성 방식이 있다. JVM의 힙 영역에 저장되어 가비지 컬렉터의 관리를 받게 된다.
그러나 리터럴 방식으로 생성하면 String Pool 영역에 생성되어 절대 변하지 않는 값을 가지고 있다. 그렇기에 만약 for문으로 String에 "+" 를 붙이는 것을 10개 돌리면 10개의 String 객체가 새로 생기게 된다. 생성된 String은 String Pool에 지속적으로 생기게 된다. 이렇게 되면 가비지 컬렉터가 지속적으로 추적하여 메모리 해제를 해야하는 문제가 있다. 불변성을 갖고 있기에 Thread-Safe하다는 특징 있다.
String first = "first"; //리터럴
String second = new String("second"); //new
StringBuilder와 StringBuffer
StringBuilder와 StringBuffer는 객체에 변동이 있더라도 하나의 객체만 가지고 있어 메모리 사용을 줄여준다.
만약 String이 지속적으로 바뀌는 객체라면 StringBuilder, Buffer 쓰는 것을 권장한다.
차이점은 무엇인가요?
1. StringBuffer는 Thread-Safe하나 StringBuilder는 그렇지 않다.
2. StringBuilder는 안정성 보장이 안되나 성능이 약 2배 가량 좋다.
결론~
Thread-Safe하면서 메모리 낭비를 하지않는 StringBuffer가 가장 매력적인 선택지인것 같다!!
String | StringBuilder | StringBuffer | |
응답속도 빠른 순 | 3 | 1 | 2 |
메모리 사용 적은 순 | 2 | 1 | 1 |
'언어 & 라이브러리 > 자바' 카테고리의 다른 글
[자바] Hashmap의 동작 원리에 대해 알아보자 (0) | 2022.10.14 |
---|---|
[자바] JVM 설정 옵션 (0) | 2022.10.08 |
[자바] 자바 8에 새롭게 변화된 기능들 (2) | 2022.09.23 |
[자바] 자바를 사용하는 이유 (0) | 2022.09.23 |
[자바] 상속보다 합성을 사용해야 하는 이유 (0) | 2022.09.13 |
댓글