2018. 7. 4. 16:41ㆍJAVA
[JAVA] String vs StringBuffer vs StringBuilder 비교
□ String
- Immutable(불변함)
- 한 번 생성되면 할당된 메모리 공간이 변하지 않는다.
- 문자열 연산(+, concat) 시, 새로운 String 객체 생성 후 연결된 문자열 저장 및 참조
- Heap 메모리 영역(가비지 컬렉션이 동작하는 영역)에 생성
- 한 번 생성된 객체의 내부 내용을 변화시킬 수 없다.
- 문자열 연산이 많은 경우, 성능이 좋지 않다.
- 간단하고 동기화에 대해 신경쓰지 않아도 된다.(Thread-Safe), 내부 데이터를 자유롭게 공유 가능
□ StringBuffer, StringBuilder
- Mutable(변함, 변하기쉬움)
- 문자열 연산 등으로 기존 객체에 공간이 부족하게 되는 경우, 기존의 버퍼 크기를 늘리며 유연하게 동작
StringBuffer vs StringBuilder 동기화 여부
- StringBuffer는 각 메서드 별로 Synchronized Keyword 가 존재, 멀티스레드 환경에서도 동기화 지원 → 멀티 스레드 환경
- StringBuilder는 동기화를 보장하지 않는다. → 단일 스레드 환경
- StringBuffer를 단일스레드 환경에서도 사용 가능하지만, 동기화 관련 처리 때문에 StringBuilder에 비해 성능이 떨어진다.
* JDK 1.5 이전
- 문자열 연산(+, concat) 시, 새로운 메모리에 할당하여 참조함으로 인해서 성능상의 이슈 존재
* JDK 1.5 이후
- 컴파일 단계에서 String 객체를 사용하더라도 StringBuilder로 컴파일 되도록 변경
→ String과 StringBuilder와 성능상으로 차이가 없어졌다.
단순 성능상으로 비교하자면,
StringBuilder > StringBuffer >>> String
'JAVA' 카테고리의 다른 글
[JAVA] Annotation(어노테이션) 이란? (1) | 2018.07.12 |
---|---|
[JAVA] Collection(컬렉션) 이란? (0) | 2018.07.12 |
[JAVA] 클래스, 변수명 네이밍 규칙 (0) | 2018.07.06 |
[JAVA] 객체 지향 프로그래밍이란? (0) | 2018.07.06 |
[JAVA] 데이터 입출력 방법 (Scanner vs BufferedReader & BufferedWriter 클래스) (0) | 2018.07.04 |