2014년 4월 22일 화요일

[Java]stringBuffer와 string

  • String
string 클래스는 문자열 변경이 불가능하다. 변경이 아닌 새롭게 만들어 내기 때문에 기존 문자열은 남아 있게 된다. 그 결과 자원(시간,메모리)낭비를 초래한다.
string 클래스가 immutable(변경불가)클래스인 이유?
string 클래스의 값은 생성자에서만 설정이 된다. 그래야 다른 스레드나 변수에 안전하게  공유가 가능하기 때문이다.
  • stringBuffer
StringBuffer 클래스는 가지고 있는 문자열의 내용을 변경 가능하도록 만든 클래스이다. append(), insert(), delete() 등의 메소드를 통하여 StringBuffer 객체가 가지고 있는 문자열을 변경할 수 있고 String 클래스처럼 새로운 객체를 생성하지 않고, 기존의 문자열을 변경한다. 이 경우 객체 생성을 하지 않아 String 클래스보다 효율적이라고 생각하기 쉬우나
동기화(synchronization)를 보장해야 하기 때문에 단순한 참조에서는 상대적으로 String 보다 나쁜 성능(가독성을 떨어뜨린다.)을 보인다. 
따라서, 단순 참조가 많은 경우 StringBuffer 클래스보다 String 클래스가 유리하다. 
물론, StringBuffer 클래스는 동기화되어 있으므로, 멀티 쓰레드에 대하여 안전하다. 

댓글 없음:

댓글 쓰기