ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] String, StringBuffer, StringBuilder의 클래스의 특징
    Java/기타 2019. 1. 4. 13:10
    반응형

    String 클래스의 특징

     String 클래스에는 문자열을 저장하기 위해서 문자형 배열 변수(char[]) value를 인스턴스변수로 정의해놓고 있습니다. 인스턴스 생성 시 생성자의 매개 변수로 입력받는 문자열은 이 인스턴스변수(value)에 문자열 배열(char[])로 저장되는 것 입니다.

     한번 생성된 String인스턴스가 갖고 있는 문자열은 읽어 올 수만 있고, 변경할 수 없습니다. 예를 들어 "+" 연산자를 이용하여 문자열을 결합하는 경우 인스턴스 내의 문자열이 바뀌는 것이 아니라 새로운 문자열이 담긴 String 인스턴스가 생성되는 것 입니다. 이처럼 덧셈연산자(+)를 사용해서 문자열을 겹합하는 것은 매 연산 시 마다 새로운 문자열을 가진 String인스턴스가 생성되어 메모리공간을 차지하게 되므로 가능한 한 결합횟수를 줄이는 것이 좋습니다.

     문자열간의 결합이나 추출 등 문자열을 다루는 작업이 많이 필요한 경우에는 String클래스 대신 StringBuffer클래스를 사용하는 것이 좋습니다. String인스턴스와는 달리 StringBuffer인스턴스에 저장된 문자열은 변경이 가능하므로 하나의 StringBuffer인스턴스만으로도 문자열을 다루는 것이 가능합니다.

     

    StringBuffer 클래스의 특징

     String클래스는 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능합니다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있습니다.

     

    StringBuffer append() 메서드 사용 시에 주의사항

     - append() 메서드 내에서 +를 이용해 문자열을 더하면 StringBuffer를 사용하는 효과가 없습니다.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class StringBufferTest {
     
        public static void main(String[] args){
            
            StringBuffer sb01 = new StringBuffer();        
            sb01.append("01.");
            sb01.append("ABC");
            sb01.append("DEF");
            sb01.append("DEF");    
            System.out.println("sb01 : " + sb01.toString());
            
            StringBuffer sb02 = new StringBuffer();    
            sb02.append("02.").append("ABC").append("DEF").append("DEF");        
            System.out.println("sb02 : " + sb02.toString());
            
            StringBuffer sb03 = new StringBuffer();
            // append() 메서드 내에서 +를 이용해 문자열을 더하면 StringBuffer를 사용하는 효과가 없다. 
            sb03.append("03." + "ABC" + "DEF" + "DEF");
            System.out.println("sb03 : " + sb03.toString());
        }
    }
     
    cs

     

    StringBuffer 클래스나 StringBuilder 클래스 차이점

     StringBuffer 클래스나 StringBuilder 클래스에서 제공하는 메서드는 동일합니다. 두 클래스의 차이점은 동기화 지원 여부입니다. StringBuffer 클래스는 스레드에 안전하게 설계되어 있으므로, 여러 개의 스레드에서 하나의 StringBuffer 객체를 처리해도 전혀 문제가 되지 않습니다. 하지만 StringBuilder는 단일 스레드에서의 안전성만을 보장합니다. 그렇기 때문에 여러 개의 스레드에서 하나의 StringBuilder 객체를 처리하면 문제가 발생합니다.

     

     결론적으로 짧은 문자열을 처리할 때는 String, 스레드에 안전한 프로그램이 필요할 때나, 개발 중인 시스템의 부분이 스레드에 안전한지 모를 경우는 StringBuffer, 스레드에 안전한지의 여부와 전혀 관계 없는 프로그램을 개발할 경우는 StringBuilder를 사용하시면 됩니다.

     

     

    반응형

    댓글

Designed by Tistory.