StringBuffer, StringBuilder

Agnes Park·2022년 3월 12일
0

JAVA

목록 보기
26/34

1. StringBuffer, StringBuilder

  • String 클래스는 immutable 클래스이고, (immutable : 내용변경불가)
  • StringBuffer, StringBuilder는 mutable 클래스임 (mutable : 내용변경가능)

StringBuffer:
Java ver 1.0부터 있던 클래스
쓰레드에 안전(thread-safe), 속도가 느림

StringBuilder:
Java 5부터 생긴 클래스
쓰레드에 안전하지 않다(thread-unsafe), 속도가 빠름.

  • 그 외에는 StringBuffer와 StringBuilder는 같은 기능(메소드)을 갖고 있음
    ** 웹 프로그래밍 등에선 문자열을 '붙여 나가며' 완성하는 동작을 많이 함
  • 실무에서는
    String 을 concat() (혹은 + 연산)하기 보다는 // 새로운 메모리 할당 > garbage collection > 반복 > 로드 많이 발생
    StringBuffer 를 append() 하는 것을 더 많이 사용함 (성능 UP)
※ 그러나 학습예제에선 예제단순화를 위해 String 을 기본적으로 사용하니 참조 바랍니다
package com.lec.java.string03;

public class String03Main {

	public static void main(String[] args) {
		System.out.println("[1] StringBuffer, StringBuilder");
		// String 클래스는 immutable 클래스이고,
		// StringBuffer, StringBuilder는 mutable 클래스임
		
		System.out.println("[String: immutable]");

		String str1 = "Hello";
		String str2 = str1;
		
		System.out.println("str1 = " + str1);
		System.out.println("str2 = " + str2);
				
		System.out.println((str1 == str2)? "동일참조" : "다른참조");	// 동일 참조
		
		str1.concat("Java");	// immutable 객체인 st1은 안바뀝니다! concat() 의 결과로 새로운 String 객체 생성
		System.out.println("str1:" + str1);	// 현재 str1 값은???
		str1 = str1.concat("Java");	// str1을 바꾸려면 덮어쓰기 해야 한다.
		System.out.println("str1:" + str1);	// 현재 str1 값은???
		System.out.println("str2:" + str2);
		
		System.out.println((str1 == str2)? "동일참조" : "다른참조");	// 다른 참조
		
		System.out.println();
		System.out.println("[StringBuffer: mutable]");

		
		StringBuffer buff1 = new StringBuffer("Hello");
		StringBuffer buff2 = buff1;
		
		System.out.println("buff1 = " + buff1);
		System.out.println("buff2 = " + buff2);
		
		buff1.append("Java");	// mutable 객체의 메소드는 동일한 동작이라도 immutable과 이름이 다르게 설계되어 있다
								// String.concat()  vs  StringBuffer.append()

		System.out.println("buff1 = " + buff1);
		System.out.println("buff2 = " + buff2);
		
		System.out.println((buff1 == buff2) ? "동일참조" : "다른참조");

		
		System.out.println();
		
		buff1.insert(3,  "ABCD");
		System.out.println(buff1);
		System.out.println(buff1.reverse());
		System.out.println(buff1);
		buff1.delete(3, 7);	// 인덱스 3 ~ 6까지 삭제
		System.out.println(buff1);
		
		// StringBuffer:
		//  Java ver 1.0부터 있던 클래스
		//  쓰레드에 안전(thread-safe), 속도가 느림
		
		// StringBuilder:
		// Java 5부터 생긴 클래스
		// 쓰레드에 안전하지 않다(thread-unsafe), 속도가 빠름.
		
		// 그 외에는 StringBuffer와 StringBuilder는 같은 기능을 갖고 있음
		
		
		// TODO
		
		
		System.out.println("\n프로그램 종료");
	} // end main()

} // end class

1개의 댓글

comment-user-thumbnail
2022년 4월 21일

String str1 = "hello" 이 JVM 메서드영역에 올라갔는데 맞는걸까요..?

답글 달기