본문
[2017.09.07] 20. String과 StringBuffer VS StringBuilder
String과 메모리
String 객체는 한 번 생성될 때 메모리 공간이 고정되었다. 그리고 '+'나 'concat' 메소드를 사용해 문자열이 길어지면서
1) 의도 하지 않는 메모리 침범
2) 제 3의 새로운 객체 생성 (∵ 할당된 메모리를 변경할 수 없으므로)
이러한 문제가 있었다.
그래서 JDK 1.5 버전 이후 String은 모두 StringBuilder로 컴파일러에서 자동으로 처리한다.
동기화란?
동기화(synchronization)는 데이터를 같게(=) 하는 것을 의미한다. 다르게 생각해보면 "데이터 일치를 위해 A가 데이터를 수정 중에는 B는 데이터를 수정을 할 수 없다"는 것을 의미한다.
StringBuffer VS StringBuilder
StringBuffer와 StringBuilder의 가장 큰 차이는 "동기화 지원 여부" 이다.
StringBuffer, StringBuilder는 같은 메소드와 인터페이스를 상속 구현하지만 오버라이딩 메소드를 확인하면 StringBuffer는 "synchronized" 키워드로 동기화를 지원하지만 StringBuilder는 동기화를 지원하지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
public final class StringBuffer
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
...
@Override
public synchronized StringBuffer append(Object obj) {
toStringCache = null;
super.append(String.valueOf(obj));
return this;
}
...
} |
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13 |
public final class StringBuilder
extends AbstractStringBuilder
implements java.io.Serializable, CharSequence
{
...
@Override
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
...
} |
cs |
그래서 동시에 처리 가능한 StringBuilder는 동시에 처리 가능하지 않은 StringBuffer보다 상대적으로 속도가 빠르다.
(∵ 동기화를 지원하지 않기 때문에 A, B, C 등 많은 클라이언트가 동시에 접속해 수정 가능)
#String #StringBuffer #StringBuilder #동기화 #StringBuffer vs StringBuilder
'컴퓨터 > 이론: 개발' 카테고리의 다른 글
[2017.09.08] 19. JVM 메모리 영역 (0) | 2017.09.08 |
---|---|
[2017.09.07] 04. MVC 패턴과 실습 (0) | 2017.09.07 |
[2017.09.06] 03-5. OOP의 5대원칙 - DIP (0) | 2017.09.06 |
[2017.09.06] 03-4. OOP의 5대원칙 - ISP (0) | 2017.09.06 |
[2017.09.06] 03-3. OOP의 5대원칙 - LSP (0) | 2017.09.06 |
댓글