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는 문자열 처리가 많고, 멀티 쓰레드 환경인 경우 사용한다.
'프로그래밍 언어 > JAVA' 카테고리의 다른 글
[JAVA] 접근제한자, 정보은닉과 캡슐화 . (0) | 2021.02.04 |
---|---|
[JAVA] 정적 메소드(Static Method) & 정적 변수(Static Variable) (0) | 2021.02.04 |
[JAVA] 스레드(Thread) (0) | 2021.01.20 |
[JAVA] 예외 처리 (0) | 2021.01.20 |
[JAVA] 인터페이스(Interface) (0) | 2021.01.20 |
댓글