요르딩딩
[JAVA] StringBuffer 본문
String VS StringBuffer
[String 클래스]
1. String 클래스의 인스턴스는 한번 생성되면, 그 값을 읽기만 가능하고, 변경할 수 없습니다.
2. 덧셈(+) 연산자를 이용해 String 인스턴스의 문자열을 결합하면, 내용이 합쳐진 새로운 String 인스턴스를 생성합니다.
따라서 문자열을 많이 결합하면 결합할수록 공간의 낭비뿐만 아니라 속도 또한 매우 느려지게 됩니다.
3. String 클래스와 같이 인스턴스가 한 번 생성되면 그 값을 변경할 수 없는 클래스를 불변 클래스(immutable class)라고 합니다.
[StringBuffer 클래스]
1. StringBuffer 클래스의 인스턴스는 그 값을 변경할 수도 있고, 추가할 수도 있습니다.
2. StringBuffer 클래스는 내부적으로 버퍼(buffer)라는 독립적인 공간을 가집니다.
버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이며, 생성자를 통해 그 크기를 별도로 설정할 수도 있습니다.
하지만 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성됩니다.
3. StringBuffer 인스턴스를 사용하면 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빨라집니다.
이러한 StringBuffer 클래스는 java.lang 패키지에 포함되어 제공됩니다.
4. StringBuffer 클래스와 같이 자유롭게 인스턴스의 값을 변경할 수 있는 클래스를 가변 클래스(mutable class)라고 합니다.
[그럼에도 String을 사용하는 이유]
단점이 있는 불변 클래스(String클래스)를 사용하는 이유는 멀티 스레드 환경에서 객체가 변화되는 상황이라면 불변 인스턴스를 사용하는 것이 좀 더 신뢰할 수 있는 코드를 작성할 수 있기 때문입니다.
즉, 하나의 객체에 접근하면서 각각의 객체가 서로 영향을 주어서는 안 되는 경우에 불변 인스턴스를 사용하면 값이 변하지 않는다는 점이 보장됩니다.
[Test]
추가 : str.length = 0; 보다 str.isEmpty()가 더 빠르다.
참고: http://tcpschool.com/java/java_api_stringBuffer
'[Java]' 카테고리의 다른 글
param( "A,B,C" ) -> array ( [A,B,C] )으로 변경 (0) | 2021.11.23 |
---|---|
[작성중 ]싱글톤 패턴 (0) | 2021.08.10 |
[JAVA] (collection) iterator (0) | 2021.05.24 |
[JAVA] String.getBytes("")'; (0) | 2021.05.20 |
[JAVA] lastIndexOf(), String.format("%02d")~ (0) | 2021.05.20 |