본문 바로가기
IT/JAVA

자바 stringBuffer va stringBuilder vs string

by 지니라 2017. 3. 30.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

JAVA String & StringBuffer & StringBuilder


1. String
- 메모리 불변
- 문자열 변경시 객체가 새로 생성
- equals() 오버라이딩


2. StringBuffer
- 메모리 가변
- 문자열 변경시 기존 객체가 변경
- 메모리 변경이 잦은 경우 효율적
- 스레드에 안전하게 설계(ThreadSafe)


3. StringBuilder
- 메모리 가변
- 문자열 변경시 기존 객체가 변경
- 메모리 변경이 잦은 경우 효율적
- 멀티스레딩시 동기화 처리되지 않음
- 단일 스레드에서의 안전성만을 보장


4. 응답시간
- String > StringBuffer > StringBuilder


5. 메모리
- String > StringBuffer == StringBuilder


String은 같은 문자열값이면 같은 메모리를 사용한다.
즉, 같은 문자열값을 갖는다면 새로 메모리를 할당하지 않고, 기존의 메모리를 참조만 시키는 구조이다.
반면, StringBuffer와 StringBuilder는 String과 다르게 같은 문자열을 갖더라도 변수가 다르면 서로 다른 메모리에 저장한다.

JDK 5.0 이상을 사용한다면, String을 사용하였을 때에도 컴파일러에서 자동으로 StringBuilder로 변환해 준다.
하지만 반복 루프를 사용해서 문자열을 더할 때는 객체를 계속 추가하기 때문에, String 클래스를 쓰는 대신 스레드와 관련이 있으면 StringBuffer를, 스레드 안전 여부와 상관이 없으면 StringBuilder를 사용하는 것을 권장한다.

StringBuffer와 StringBuilder의 append() 메소드를 사용할 때 주의할 점이 있는데, 매개변수에 String '+'를 사용하지 말아야 한다는 것이다. String '+'를 사용하면, 내부적으로 String 객체를 생성해 연산을 진행하므로 StringBuffer(또는 StringBuilder) 객체를 이용하는 이점을 사라지게 하기 때문이다.


REF : http://cafe.naver.com/hackerkim/187
REF : http://blog.naver.com/bluegriffin?Redirect=Log&logNo=40206200298
REF : http://blog.naver.com/hakchangs?Redirect=Log&logNo=130111435180
출처 : http://m.blog.naver.com/rex4314/207930271

'IT > JAVA' 카테고리의 다른 글

자바 DateUtils.java  (0) 2017.03.30
자바 stringBuffer va stringBuilder vs string  (0) 2017.03.30
자바 Session 세션  (0) 2017.03.30
자바 arrayList  (0) 2017.03.30
자바 stringUtils.java  (0) 2017.03.30