Free Lines Arrow
본문 바로가기
Language/Java

[Java] String, StringBuffer, StringBuilder

by skahn1215 2021. 8. 23.
728x90
반응형

String

String은 문자열과 관련된 작업을 할 때 유용하게 사용할수 있다.

String class 는 불변이다.

 

 

특징

불변이다?

  • String 인스턴스는 한번 생성 되면 값을 읽기만 할 수 있다.
    - 불변(immutable class)객체라고 한다.
String text = "hello";
text+="world";
  • 우리는 위와 같이 String을 쓰는 경우가 종종있다.
  • 사실 값이 변경 되는 것이아니라.
  • 내용이 합쳐진 새로운 Stirng 인스턴스가 생성된다.

 

 

 

StringBuffer

  • string 의 불변의 단점을 보완해준다.
  • 생성된 값을 변경하거나 추가할 수 있다.
  • 가변(mutable class)클래스이다.

 

 

특징

  • StringBuffer 클래스는 내부적으로 버퍼(buffer)라고 하는 독립적인 공간을 가진다.
  • 버퍼 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이다.
  • 생성자를 통해 그 크기를 설정할 수 있다.
    - 하지만 인스턴스 생성 시 사용자가 설정한 크기보다 언제나 16개의 문자를 더 저장할 수 있도록 여유 있는 크기로 생성된다.
  • 문자열을 바로 추가할 수 있으므로, 공간의 낭비도 없으며 속도도 매우 빨라진다.

 

 

 

 

 

불변 클래스(immutable class)와 가변 클래스(mutable class)

  • String을 불변이다. StringBuffer는 가변이다.

  • 그렇다면 가변을 쓰면 편할것 같은데 왜 불변을 쓸까?
  • 멀티쓰레드 환경에서 객체가 변화되는 것을 방지 할수 있다.
    - 신뢰성 높은 코드를 작성할 수 있다.

 

 

StringBuilder

  • 가변 클래스이다.
  • 기능은 StringBuffer와 유사하다

 

 

StringBuilder 와 StringBuffer의 차이점

  • 그렇다면 둘의 차이점은 어떤게 있을까?
  •  StringBuffer는 Thread-safe 하다.
  •  StringBuilder는 Thread-safe하지 않다.
  • 그렇기 때문에 Multi-Thread 환경에서는 StringBuffer를 사용하자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

[Java] Exception(예외)  (0) 2021.08.23
[Java] Checked Exception, Unchecked Exception  (0) 2021.08.23
[Java] String Object 와 String literal, 동일성 동등성  (0) 2021.08.21
[Java] Annotation  (0) 2021.08.20
[Java] Collection Framework  (0) 2021.08.20

댓글