-
String, StringBuffer, StringBuilder 차이Java & 배경지식/기본상식 2020. 3. 19. 08:54반응형
String
- new 연산을 통해 생성되는 그 인스턴스의 메모리 공간은 절대 변하지 않는다.
- 문자열에 변화를 줘도 메모리 공간이 변하는게 아니라 새로운 String 객체를 만들어서 새로운 메모리 공간을 만드는 것
String 단점
- 새로운 문자열이 만들어지면 가비지 콜렉터에 의해 제거
- 문자열 연산이 많아지면 계속해서 객체를 만드는 오버헤드 발생
- 연산에 내부적으로 Char배열을 사용
String 장점
- String 클래스의 객체는 불변하기 때문에 단순하게 읽어가는 조회연산에서는 타 클래스보다 빠르게 읽을 수 있다
- 불변하기 때문에 멀티쓰레드 환경에서 동기화를 신경쓸 필요가 없다.
결론
- String클래스는 문자열 연산이 적고 조회가 많을 때 멀트쓰레드 환경에서 사용하면 좋음
StringBuffer, StringBuilder
- 클래스를 한번 만들면(new) 연산이 필요할 때 크기를 변경시켜서 문자열을 변경
- StringBuffer와 StringBuilder의 클래스의 메서드들이 같다.
차이점
- StringBuffer
- 문자열 멀티쓰레드환경에서 sysnchronized키워드가 가능하여 동기화 가능
- thread-safe
- StringBuilder
- 동기화를 고려하지 않기 때문에 싱글쓰레드 환경에서 StringBuffer에 비해 연산처리가 빠르다
특징
- JDK1.5 이상부터 String에서 +연산으로 작성하더라도 StringBuilder로 컴파일하게 만들어놨지만 여전히 String클래스의 객체 생성하는 부분은 동일하므로 StringBuffer, StringBuilder 사용 필요
- StringBuffer, StringBuilder의 경우 buffer size를 초기에 설정을 해야되는데 이런 생성, 확장 오버로드가 걸려 버퍼사이즈를 잘못 초기화할 경우 성능이 좋지 않을 수 있음
반응형'Java & 배경지식 > 기본상식' 카테고리의 다른 글
Synchronized (0) 2020.05.02 JVM의 메모리 구조 (0) 2020.04.26 자바의 자료구조 (0) 2020.03.19 객체 지향적 5대원칙(SOLID) (0) 2020.03.19 REST API 공부하기! (0) 2020.02.24