자바 문자열 객체

  • String
  • StringBuffer
  • StringBuilder


String 객체

String 객체는 new 연산을 이용해서 객체를 생성하면 인스턴스의 메모리 공간이 변하지 않는다. (immutable)
따라서, + 연산이나 concat을 수행하면 새로운 문자열 객체들이 만들어지고
이를 반복하면 새로운 인스턴스들이 생겨나므로 성능이 낮아진다. 

메모리값이 변하지않으므로 조회 연산에서는 다른 클래스보다 성능이 좋고
그렇기때문에 멀티스레드 환경에서 동기화에 대해 신경쓸 필요가 없다.

> String 객체는 문자열 연산이 적고, 조회가 많은 멀티스레드 환경에 적합


StringBuffer, StringBuilder 객체

String 과 다른 점은 mutable 하다는 점이다.
문자열을 생성하고(new) 변경사항이 생기면 메모리 크기를 늘려서 문자열을 바꾼다.

StringBuffer 와 StringBuilder 는 내부적으로 메소드가 동일하지만
StringBuffer 는 동기화를 지원(syncronized)하고 StringBuilder 는 동기화를 지원하지 않는다는 점에서 다르다.

따라서 멀티스레드 환경에서는 StringBuffer 를 사용하고(thread-safe)
싱글스레드 환경에서는 StringBuilder 를 사용하여 연산속도를 빠르게 하는 것이 적합하다.

> 문자열 연산이 많고 멀티스레드이면 StringBuffer를, 동기화를 신경쓸 필요가 없다면 StringBuildrer 사용


JDK 버전에 따른 String 성능 개선

1.5 버전 이상에서는
String 객체로 연산해도 내부적으로 StringBuilder 로 변환되어 성능상 이슈를 해결했다고 한다.



'Language > Java' 카테고리의 다른 글

자바 커뮤니티2 - 상속  (0) 2019.05.28
자바 커뮤니티1 - Class  (0) 2019.05.22
Java 배열 선언, 초기화  (0) 2018.08.04
Java 접근지정자 (Access Modifier)  (0) 2018.08.04
Java String Constant Pool의 이해  (0) 2018.08.02

+ Recent posts