String의 단점 그리고 StringBuffer와 StringBuilder
String 클래스는 메모리를 과소비합니다.
String String1 = "ABC";
System.out.println(String1);
String1 += "DEF";
System.out.println(String1);
위 소스를 실행하면 결과값은
ABC
ABCDEF가 나옵니다.
참고자료 : 블스님의 자바 강좌 PPT 참조
String을 사용하여 DEF를 더하게 되면 기존에 선언된 ABC에 DEF를 더하는 것이 아니라 새로운 메모리에 ABCDEF가 생겨나고 기존에 ABC는 GC(가비지컬렉션)에 의해 삭제가 됩니다.
따라서 String를 이용하여 지속적으로 문자열을 바꾸는 것은 많은 메모리를 소모하게 됩니다. 이런 문제를 해결하기 위해
StringBuffer와 StringBuilder 등장하게 되었습니다.
StringBuffer/StringBuilder의 차이
StringBuffer/StringBuffer는 String 과 다르게 동작합니다. 문자열 연산 등으로 기존 객체에 공간이 부족하게 되는 경우, 기존의 버퍼 크기를 늘리며 유연하게 동작합니다. StringBuffer와 StringBuilder 클래스가 제공하는 메서드는 서로 동일합니다.
그렇다면 두 클래스의 차이는 무엇일까요.? 바로 동기화를 지원하느냐 안하느냐의 차이입니다.
단순하게 속도와 성능 측면에서 고려하자면
StringBuilder > StringBuffer >>> String 입니다.
하지만 각각의 클래스들은 성능 외에도 사용 편의성, 멀티스레드 환경 등 여러가지 고려해야할 요인이 있으므로 이에 적합한 것을 사용하면 되겠습니다.
'Java 개발 이야기' 카테고리의 다른 글
자바 MessageDigest를 이용한 Hash 알고리즘 (0) | 2017.08.23 |
---|---|
자바 DB 연동하기(Oracle) (0) | 2017.08.22 |
자바 디자인 패턴 - 싱글톤 패턴 예제 및 설명 (0) | 2017.07.31 |
자바 (Interface) 인터페이스를 이용한 로봇 장난감 만들기 프로그래밍(다형성을 이용!) (0) | 2016.05.01 |
자바 인터페이스(Interface) 정리 (0) | 2016.04.28 |