[JAVA] String / StringBuffer / StringBuilder
2024. 2. 23. 16:23ㆍWeb/JAVA
자바에서는 대표적으로 문자열을 다루는 자요형 클래스로 String / StringBuffer / StringBuilder 3가지 자료형을 지원한다.
3가지 자료형은 사용 목적에 따라 쓰임새가 달라지게 된다.
StringBuffer r 클래스
- StringBuffer 클래스는 문자열을 연산(추가하거나 변경) 할 때 주로 사용하는 자료형
- 물론 String 자료형 만으로도, + 연산이나 concat() 메소드로 문자열을 이어붙일 수 있다.
- 하지만 이는 새로운 인스턴스를 생성하게 되어, 공간의 낭비 뿐만 아니라 속도도 느려지게된다.
String result = "";
result += "hello";
result += " ";
result += "jump to java";
System.out.println(result); // hello jump to java
// → 심플하지만 연산 속도가 느리다는 단점이 있다
StringBuffer sb = new StringBuffer(); // StringBuffer 객체 sb 생성
sb.append("hello");
sb.append(" ");
sb.append("jump to java");
String result = sb.toString();
System.out.println(result); // hello jump to java
// → + 연산보다는 복잡해 보이지만 연산 속도가 빠르다는 장점이 있다
- 기본적으로 StringBuffer의 버퍼(데이터 공간) 크기의 기본값은 16개의 문자를 저장할 수 있는 크기이며,
- 생성자를 통해 그 크기를 별도로 설정할 수 있다.
- 만일 문자열 연산중에 할당된 버퍼의 크기를 넘게 되면 자동적으로 버퍼를 증가 시키나, 효율이 떨어질수 있어 넉넉하게 잡는것이 이점
String str = "abcdefg";
StringBuffer sb = new StringBuffer(str); // String -> StringBuffer
System.out.println("처음 상태 : " + sb); // 처음상태 : abcdefg
System.out.println("문자열 String 변환 : " + sb.toString()); // StringBuffer를 String으로 변환하기
System.out.println("문자열 추출 : " + sb.substring(2,4)); // 문자열 추출하기
System.out.println("문자열 추가 : " + sb.insert(2,"추가")); // 문자열 추가하기
System.out.println("문자열 삭제 : " + sb.delete(2,4)); // 문자열 삭제하기
System.out.println("문자열 연결 : " + sb.append("hijk")); // 문자열 붙이기
System.out.println("문자열의 길이 : " + sb.length()); // 문자열의 길이구하기
System.out.println("용량의 크기 : " + sb.capacity()); // 용량의 크기 구하기
System.out.println("문자열 역순 변경 : " + sb.reverse()); // 문자열 뒤집기
System.out.println("마지막 상태 : " + sb); // 마지막상태 : kjihgfedcba
- 가변성 이기때문에, 동일 객체내에서 문자열 크기를 변경하는 것이 가능하다.
- 따라서, 값이 변경 될때마다 새롭게 객체를 만드는 String보다 훨씬 빠르기 때문에, 문자열의 추가, 수정, 삭제가 빈번하게 발생 할 경우 String 클래스가 아닌 StringBuffer / StringBuilder 를 사용하는 것이 이상적이라고 할 수 있다.
// StringBuffer객체를 toString()을 통해 String객체화를 하고 equals 비교
String sb_tmp = sb.toString();
String sb2_tmp = sb2.toString();
System.out.println(sb_tmp.equals(sb2_tmp)); // true
StringBuffer / StringBuilder 차이점
- 두 클래스의 큰 차이는 멀티 쓰레드에서 안전하냐 아니냐 이다.
- 현업에서는 자바 어플리케이션 대부분 멀티 스레드 환경에서 돌아가기 때문에 안정적인 StringBuffer 통일하여 코딩
'Web > JAVA' 카테고리의 다른 글
[JAVA] equals(), hashCode() (1) | 2024.02.26 |
---|---|
[JAVA] 컴파일 과정 (0) | 2024.02.26 |
[JAVA] Immutable(불변) / Mutable(가변) (0) | 2024.02.23 |
[JAVA] 래퍼 클래스 (Wrapper Class) (0) | 2024.02.23 |
[Java] 원시타입 / 참조타입 (0) | 2024.02.23 |