ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • String, StringBuffer, StringBuilder 차이
    Java & 배경지식/기본상식 2020. 3. 19. 08:54
    반응형

    String

    • new 연산을 통해 생성되는 그 인스턴스의 메모리 공간은 절대 변하지 않는다.
    • 문자열에 변화를 줘도 메모리 공간이 변하는게 아니라 새로운 String 객체를 만들어서 새로운 메모리 공간을 만드는 것

    String 단점

    • 새로운 문자열이 만들어지면 가비지 콜렉터에 의해 제거
    • 문자열 연산이 많아지면 계속해서 객체를 만드는 오버헤드 발생
      • 연산에 내부적으로 Char배열을 사용

    String 장점

    • String  클래스의 객체는 불변하기 때문에 단순하게 읽어가는 조회연산에서는 타 클래스보다 빠르게 읽을 수 있다
    • 불변하기 때문에 멀티쓰레드 환경에서 동기화를 신경쓸 필요가 없다.

    결론

    • String클래스는 문자열 연산이 적고 조회가 많을 때 멀트쓰레드 환경에서 사용하면 좋음

     

    StringBuffer, StringBuilder

    • 클래스를 한번 만들면(new) 연산이 필요할 때 크기를 변경시켜서 문자열을 변경
    • StringBuffer와 StringBuilder의 클래스의 메서드들이 같다.

    차이점

    • StringBuffer
      • 문자열 멀티쓰레드환경에서 sysnchronized키워드가 가능하여 동기화 가능
      • thread-safe
    • StringBuilder
      • 동기화를 고려하지 않기 때문에 싱글쓰레드 환경에서 StringBuffer에 비해 연산처리가 빠르다

    특징

    • JDK1.5 이상부터 String에서 +연산으로 작성하더라도 StringBuilder로 컴파일하게 만들어놨지만 여전히 String클래스의 객체 생성하는 부분은 동일하므로 StringBuffer, StringBuilder 사용 필요
    • StringBuffer, StringBuilder의 경우 buffer size를 초기에 설정을 해야되는데 이런 생성, 확장 오버로드가 걸려 버퍼사이즈를 잘못 초기화할 경우 성능이 좋지 않을 수 있음
    반응형

    'Java & 배경지식 > 기본상식' 카테고리의 다른 글

    Synchronized  (0) 2020.05.02
    JVM의 메모리 구조  (0) 2020.04.26
    자바의 자료구조  (0) 2020.03.19
    객체 지향적 5대원칙(SOLID)  (0) 2020.03.19
    REST API 공부하기!  (0) 2020.02.24
Designed by Tistory.