코진남
[자바] String,StringBuilder,StringBuffer 차이 본문
코딩테스트 준비를 하면서 이세개의 차이가 뭔지 궁금해짐...
*String
String과 나머지 두개의 차이점은 일단 String은 (불변), StringBuffer(변함) 이다.
String은 문자열을 대표하고 문자열을 조작하는 경우 유용하게 사용할수있다. 문자열,숫자,char등을 concat할때
StringBuffer,StringBuilder를 사용할 수 있다. 단, 복잡한 경우 의미가 있고, 단순한 경우에는 StringBuffer,StringBuilder를 쓰지않고 +연산자를 사용해서 합치면된다.
중요!
String 객체는 한번 생성되면 할당된 메모리 공간이 변하지않는다(heap). 연산자 또는 concat 메서드를 통해 기존에 생성된 String 클래스 객체에 다른 문자열을 덧붙여도 기존 문자열에 새로운 문자열을 붙이는게 아니라
새로운 String객체를 만든후, 새 String 객체에 연결된 문자를 정하고, 그 객체를 참조하도록 한다.
(String 클래스 객체는 Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성, 한번 생성된 객체의 내부 내용을 변화시킬수 없다.
String 객체는 이러한 이유로 문자열 연산이 많은 경우, 성능이 좋지않다.
*StringBuffer와 StringBuilder
이두개는 String과 다르게 동작한다.
문자열 연산 등으로 기존 객체의 공간이 부족한경우, 기존 버퍼의 크기를 자동으로 늘리며 유연하게 동작한다. StringBuffer와 StringBuilder가 제공하는 메서드는 서로 동일합니다.
그럼 이 두 클래스의 차이는 무엇일까?
바로 동기화 여부
-StringBuffer는 각 메서드별로 Synchronized Keyword가 존재하며, 멀티스레드 환경에서도 동기화를 지원.
-StringBuilder는 동기화를 보장하지 않는다.
총정리를 해보자면
*String은 짧은 문자열을 더할 경우 사용
*StringBuffer은 스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템 부분이 스레드에 안전한지 모를 경우 사용하면 좋다.
*StringBuilder는 스레드에 안전한지 여부가 전혀 관계 없는 프로그램을 개발할 때 사용하면 좋다.
'BackEnd > JAVA' 카테고리의 다른 글
JAVA 란? (0) | 2022.03.31 |
---|---|
interface VS abstract class 차이 (0) | 2022.02.13 |
클래스와 객체란? 객체와 인스턴스? (0) | 2022.02.05 |
JVM의 메모리 할당은 Java Garbage Collection을 통한 메모리 관리 (0) | 2022.02.05 |
싱글톤 패턴이란? (0) | 2021.12.16 |