본문 바로가기
프로그래밍 언어/JAVA

[JAVA] String, StringBuilder, StringBuffer

by E145 2021. 1. 20.
반응형

String 클래스

 

String 클래스

 

 - String 클래스를 통해 문자열도 인스턴스로 처리가 가능하다.

 

 - String 클래스의 인스턴스 생성은 큰 따옴표(")만으로도 생성이 가능하다.

   (String s1 = "String Test";)

 


String 클래스의 특징

 

 - String 클래스의 인스턴스는 상수 형태의 인스턴스이다.(저장된 데이터의 변경이 불가능하다.)

 

 - 동일한 문자열은 하나의 String 인스턴스를 생성하여 공유한다.

   (자바에서 인스턴스 생성의 수를 줄이기 위한 방법)

 

 - new 키워드를 이용하여 String 인스턴스를 생성할 수 있지만, 불필요하다.

 

 - 문자열 추가 연산의 경우 기존의 문자열과 새로운 문자열을 더해서 새로운 인스턴스를 만든 후 반환하기 때문에 연산 속도가 느리다.

 

 - 객체 상관 없이 문자열 값 자체만 비교하기 위해서는 equals메소드를 이용해야 한다.

   ( boolean result = str1.equals(str2); )

 

 

public class test {
    public static void main(String[] args){

        String s1 = "String Test";
        // new를 이용한 인스턴스 생성, 별도의 메모리 공간에 문자열 생성
        String s2 = new String("String Test");
        String s3 = "String Test";

        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s2==s3);

    }
}

실행 결과

 


 

StringBuilder, StringBuffer 클래스

 

StringBuilder

 

 - String 클래스와 다르게 StringBuilder에서는 문자열의 변경이 가능하다.

 

 - String과 달리 StringBuilder의 인스턴스를 가르켜 문자열이라고 하지는 않는다.

 

 - 문자열의 저장 및 변경을 위한 메모리 공간(버퍼)를 내부에 지닌다.

 

 - 버퍼는 자동으로 조절된다.

 

 - 버퍼의 크기를 확장하는 작업은 많은 연산이 요구되기 때문에 미리 버퍼의 크기를 할당하는 것이 좋다.

 

 - new 키워드를 이용하여 인스턴스를 생성한다.

 


 

StringBuffer

 

 - StringBuffer는 StringBuilder와 메소드의 수, 메소드의 기능, 메소드의 이름과 매개변수 형이 동일하다.

 

 - 일반적으로 StringBuilder를 StringBuffer로 바꿔도 정상 작동한다.

 

 - StringBuffer와 StringBuilder의 가장 큰 차이점은

   StringBuffer는 쓰레드에 안전하지만,

   StringBuilder는 쓰레드에 안전하지 못하다는 점이다.

 

 - StringBuffer는 한 번에 한 쓰레드에서만 접근이 가능하지만(동기),

   StringBuilder는 각 쓰레드에서 접근이 가능하다(비동기). 

 

 

public class test {
    public static void main(String[] args){

        StringBuilder sBuilder = new StringBuilder("String Builder");
        StringBuffer sBuffer = new StringBuffer("String Buffer");

        sBuilder.append(" Create1");
        sBuffer.append(" Create2");

        System.out.println(sBuilder);
        System.out.println(sBuffer);

    }
}

 

실행 결과

 


 

String, StringBuilder, StringBuffer 최종 정리

 

 - String은 불변, StringBuilder, StringBuffer는 가변

 

 - 성능은 StringBuilder > StringBuffer > String 순으로 좋다,(String이 가장 느리다.)

 

 - StringBuilder는 동기화를 지원하지 않고, StringBuffer는 동기화를 지원한다.

 

 - String은 문자열 처리가 적은 경우 사용한다.

 

 - StringBuilder는 문자열 처리가 많고, 단일 쓰레드 환경인 경우 사용한다.

 

 - StringBuffer는 문자열 처리가 많고, 멀티 쓰레드 환경인 경우 사용한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글