1. 시작부터 요약
자바에서 문자열을 다루기 위해서는 크게 String, String Buffer, String Builder를 사용할 수 있다. 들어가기 앞서 요약하자면, 연산이 많지 않을 경우는 아무거나 사용해도 상관없다. 하지만, 멀티 쓰레드 환경이고 문자열 연산이 많다면 String Buffer를 사용하고, 문자열 연산이 많고 쓰레드 동기화를 고려하지 않아도 되는 경우 String Builder를 사용한다. 또한 문자열 연산이 적고, 멀티 쓰레드 환경을 고려해야 한다면 String 클래스를 사용하면 적절하다.
2. 불변(immutable)한 String 클래스
자바의 String 클래스는 불변하다. 위와 같은 예제에서 보이는 것처럼, String 클래스는 기존 문자열에 "Tendulkar"를 더해서, 기존의 것을 변경하는 것이 아니다. 기존의 "sachin"에 "Tendulkar"를 새로 더해서 새로운 문자열을 만든다. 이후에 s가 새로운 메모리 영역을 가리키게 변경되고, "sachin"은 Garbage로 남아있다가 시간이 지나면 GC(Garbage Collection)에 의해서 사라지게 된다.
즉, 문자열 연산을 수행할 때마다, 새로운 클래스 인스턴스를 만드는 것과 같다. 이는 곧 힙 메모리에 많은 임시 가비지가 생성되어 어플리케이션의 성능에 치명적인 영향을 끼치게 된다.
3. 가변(mutable)한 String Buffer와 String Builder
위와 같은 String 클래스의 한계를 보완하고자, 가변적인 String Buffer와 String Builder 클래스가 도입됐다. String과는 다르게 .append() .delete() 등의 API를 이용해 같은 동일 객체의 문자열을 변경하는 것이 가능하다.
String Buffer와 String Builder의 차이점은 동기화의 유무이다. String Buffer 클래스는 동기화 키워드를 지원해 멀티 쓰레드 환경에서 안전하다. 반면 String Builder는 동기화를 지원하지 않는다. 다만, 성능에 있어서는 비교적으로 가장 빠르다.
'개발(레거시) > 자바' 카테고리의 다른 글
Generic, Variance (1) | 2022.10.31 |
---|---|
DataTypes, Type conversion, Type of variables (0) | 2022.10.30 |
Basic Syntax, DataStructures (0) | 2022.10.30 |