Java에서 문자열을 다루를 대표적인 클래스는 아래 3가지가 있다.
- String
- StringBuffer
- StringBuilder
1) String
먼저 String과 다른 클래스(StringBuffer, StringBuilder)의 기본적인 차이는 String은 immutable(불변), StringBuffer는 mutable(변함)에 있습니다.
예를 들어,String을 이용해 문자열 + 문자열을 한다면 새로운 메모리영역을 만들어서 저장후 그 메모리를 가리키게 변경하고 기존에 있었던 부분은 GC에 의해 사라지게 된다.
String str1 = "one ";
String str2 = "two ";
String str1 = str1 + str2; // "one two "
str1의 "one "을 가르키던 부분은 사라지고 새로 메모리를 할당해 "one two "를 가리키는 부분으로 변한다는 얘기
2) StringBuffer & StringBuilder
이 둘의 공통점은 String과는 다르게 mutable 변할수 있다는 것이 공통점이다.
다른 점은 멀티쓰레드 환경에서 안전한지 아닌지다.
StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드 환경에서 안전하다는 점(thread-safe) 입니다.
StringBuilder는 동기화를 지원하지 않기때문에 멀티쓰레드 환경에서 안전하지 않다.
속도는 StringBuilder가 제일 빠르다. 대신 위에 언급한 3가지중 성능이 제일 뛰어나다.
즉 상황에 맞게 사용하는게 효율적이다.
- String : 문자열 연산이 많이 없고 멀티쓰레드 환경일 경우
- StringBuffer : 문자열 연산이 많고 멀티쓰레드 환경일 경우
- StringBuilder : 문자열 연산이 많고 단일쓰레드이거나 동기화를 고려하지 않아도 되는 경우
'안드로이드 자바 코틀린 기초 지식 > 자바 기초지식' 카테고리의 다른 글
자바의 특징과 장단점, 객체지향 언어란??, 클래스와 객체 (0) | 2022.11.30 |
---|---|
객체 지향의 4대 특성(JAVA) (0) | 2022.11.28 |
JVM 이란? (0) | 2022.11.28 |
추상클래스, 인터페이스 (0) | 2022.08.04 |
제어자와 접근 제어자 (0) | 2022.08.03 |