nickjoIT

String과 StringBuffer의 차이점 본문

PROGRAMING/JAVA

String과 StringBuffer의 차이점

nickjo 2016. 2. 18. 23:06

1. String

- 자바에서 String은 불변객체(immutable instance)이다.



ex)

1) String hello = "Hello";, 라는 문자열 인스턴스를 메모리에 생성하고 그 래퍼런스를 hello 라는 문자열 변수에 대입한다.

2) hello는 단지 "Hello" 라는 문자열 객체를 가리키는 레퍼런스를 담고 있다.

3) hello += "and how are you?";, 이 문장을 수행한 결과 hello가 가리키는 문자열 객체의 내용은 "Hello and how are you?"가 된다.

불변 객체인 String의 내용이 바뀐 것이다.

4) hello += "and how are you?"; 문장이 내부적으로

hello = new StringBuffer(hello).append(" and how are you?").toString(); 으로 변환 된다.

5) "Hello and how are you?" 라는 문자열 객체가 생성 되기 위해서 임시로 저장할 StringBuffer를 생성 후 hello에 할당 한다.

6) 이 과정에서 참조 되지 않는 객체인 "Hello", "and how are you?", new StringBuffer 가 생기게 되고, 이 객체들은 가비지컬렉터에 의해 제거 된다.


2. StringBuffer

- 문자열을 추가하거나 변경 할 때 주로 사용하는 자료형

- StringBuffer는 내부적으로 String객체가 아닌 char[]을 사용하기 때문에, 내용의 추가 및 삭제, 변환등이 자유롭다.

3. 차이점

- String은 불변한 특성 때문에 문자열에 변환을 할 경우, 새로운 객체를 생성 후 이전의 객체를 삭제 하게 된다.

- 빈번한 문자열 조작이 이뤄지는 경우에는 StringBuffer를 사용하는 것이 적합하다.


4. 마무리

- String 이런 성능상의 이슈로 인해 jdk 1.5 이상 버전 부터는 컴파일러에서 자동으로 StringBuilder로 변환이 된다.

- String s = "Here " + "is " + "samples"; 의 경우 jdk1.5 이상 부터는 String s = (new StringBuilder ("Here is")).append("samples").toString(); 로 자동 컴파일 된다.

- 하지만 반복 루프를 사용해서 문자열을 더할때는 객체를 계속 추가해야 한다는 사실에는 변함이 없다.

- StringBuilder와 StringBuffer의 차이점은 StringBuilder 클래스는 동기화 처리를 하지 않는다는 것이다.

- 멀티쓰레드 환경에서는 StringBuffer를 사용해야 한다.

- 쓰레드 안전여부와 상관이 없으면 StringBuilder를 사용하는 것이 좋다.


[참고사이트]

http://skynaver.tistory.com/entry/String%EA%B3%BC-StringBuffer%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

http://egloos.zum.com/top2blue/v/5148222

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

람다식  (0) 2016.03.09
지네릭스(Generics)  (0) 2016.03.08
컬렉션 프레임워크란 무엇인가  (0) 2016.02.18
스레드와 프로세스의 차이점  (0) 2016.02.12
일반예외 && 실행예외  (0) 2016.02.06
Comments