-
String, StringBuffer, StringBuilder 에 대해.Programming/Java의 정석 2021. 10. 31. 19:55
1. String 클래스
String 클래스에서는 문자열을 저장하기 위해서 문자형 배열 변수(char[] value)를 인스턴스 변수로 정의해놓고 있다. 인스턴스 생성 시 생성자의 매개변수로 입력받는 문자열은 이 인스턴스변수(value)에 문자형 배열(char[])로 저장되는 것이다.
public final class String implements java.io.Serializable, Comparable{ private char[] value; ... }
한번 생성된 String 인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수는 없다.
String a = "a"; String b = "b"; String a = a + b;
이처럼 덧셈(+) 연산자를 사용해서 문자열을 결합하는 것은 매 연산 시 마다 새로운 문자열을 가진 String 인스턴스가 생성되어 메모리공간을 차지하게 되므로 가능한 한 결합횟수를 줄이는 것이 좋다.
문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많은 경우에는 String 클래스 대신 StringBuffer 클래스를 사용하는 것이 좋다. String 인스턴스와는 달리 StringBuffer인스턴스에 저장된 문자열은 변경이 가능하므로 하나의 StringBuffer 인스턴스만으로도 문자열을 다루는 것이 가능하다.
2. StringBuffer vs StringBuilder 클래스
StringBuffer는 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer 인스턴스를 생성할 때 그 크기를 지정할 수 있다. StringBuffer와 StringBuilder 클래스는 둘 다 크기가 유연하게 변하는 가변적인 특성을 가지고 있으며 제공하는 메서드도 같고 사용하는 방법도 동일하다.
하지만 두 클래스는 동기화 지원의 유무가 다르다. StringBuffer는 각 메소드 별로 synchronized keyword 가 존재하여 멀티 스레드 상태에서 동기화를 지원하고, StringBuilder 는 단일 스레드 환경에서만 사용하도록 설계되어 있다.
즉, StringBuffer 는 Thread-Safe 하고, StringBuilder 는 그렇지 않다.
Thread-Safe 스레드 안전은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다.
참조:
https://coding-factory.tistory.com/546
[Java] String, StringBuffer, StringBuilder의 차이점과 사용이유
자바에서는 문자열을 다루는 클래스로 String, StringBuffer, StringBuilder이라는 3가지 클래스가 있습니다. 위 3가지 클래스는 모두 문자열을 저장하고 관리하는 클래스이며 각 클래스 간에는 조금의 차
coding-factory.tistory.com
'Programming > Java의 정석' 카테고리의 다른 글
자바가상머신(JVM) 의 메모리 구조 (0) 2021.10.30 추상클래스 (abstract class) 와 인터페이스(interface) (0) 2021.10.29 OOP(객체지향 언어) 와JVM(자바 가상 머신) (0) 2021.10.26