
String
String 객체는 한번 생성되면 할당된 공간이 변하지 않는다.
StringBuffer
StringBuffer는 객체의 공간이 부족해지는 경우 버퍼의 크기를 유연하게 늘릴 수 있다.
String과 StringBuffer의 차이점?
String은 불변객체이기 때문에 내부의 문자열을 수정할 수 없다.
그렇기 때문에 문자열을 수정할 때마다 새로운 문자열을 리턴한다.
String name = "길동";
name += "홍";
"길동"에 "홍"을 더하게 되면 "길동홍" 이라는 새로운 String 객체가 생성되고,
data변수는 새로 생성된 String객체를 참조하게 된다.
그리고 기존에 있는 String객체는 참조되지 않게 되어 가비지 컬렉션의 메모리해제를 기다리게 된다.
문자열을 합쳐주는 + 연산자를 많이 사용하면 String 객체의 수가 늘어나기 때문에 프로그램이 느려진다.
따라서 StringBuffer의 append함수를 이용하여 "홍"을 붙여주게 되면
완성된 StringBuffer값을 메모리에 올리고 name은 다시 이 값을 참조한다.
하지만 StringBuffer를 생성할 경우 버퍼의 크기를 초기에 설정해줘야하기 때문에 String객체보다 생성 속도가 느리다. 문자열을 수정할 경우에도 버퍼의 크기와 명칭을 변경하는 내부적인 연산이 필요하기 때문에 많은양의 문자열 수정이 아니라면 String객체를 사용하는 것이 오히려 나을 수 있다.
| String | StringBuffer |
| 불변객체 (수정불가) | 가변적 (유연하게 크기 조정 가능) |
| 생성 속도 비교적 빠름 | 생성 속도 비교적 느림 |
'Backend > Java' 카테고리의 다른 글
| [JAVA] 객체 지향과 절차 지향의 특징과 차이점 (0) | 2022.01.11 |
|---|---|
| [JAVA] JAVA의 개념과 특징 (0) | 2022.01.11 |
| [자바] DAO, DTO의 역할과 관계 (0) | 2021.08.18 |
| [자바] 오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2021.08.18 |
| [자바] 인터페이스(Interface)와 추상클래스(Abstract) (0) | 2021.08.18 |