Java의 String, StringBuilder, StringBuffer Class 활용하기

    String Class


    • String Class는 자바에 구현되어있는 클래스다. 
    • String str1 = new String("abc")로 선언되는 String은 인스턴스로 선언되어 Heap 메모리 영역에 저장된다.
    • String str2 = "abc"로 선언되는 String은 Static 영역에 선언된다. 

     

    String Class의 메모리 낭비


    String은 Final로 선언된다고 한다. 따라서 String을 합치는 연산을 하게 되면 String은 기존의 참조 변수에 값을 저장하는 것이 아니다. String 덧셈 연산을 한 후, 새로운 인스턴스를 생성해 저장한다. 그리고 참조변수가 그 인스턴스를 가리키게 하는 것이다.

    String은 Final로 선언된 탓에 기존의 인스턴스는 Garbage Collector가 메모리를 수거해갈 때 사라지지 않는다. 따라서 메모리 낭비가 될 수 있다. 이런 이유로 String Class보다는 StringBuilder 및 StringBuffer 클래스를 사용한다. 

     

    StringBuilder, StringBuffer 활용하기


    • StringBuilder와 StringBuffer 클래스는 내부적으로 가변가능한 char[] 멤버변수를 가지고 있다.
    • 새로운 문자가 들어오면, 내부적으로 가변가능한 문자열 배열이 변경된다.
    • 변경된 문자열은 toString() 메서드로 반납되게 된다.
    • StringBuffer Class는 문자열 Array를 가지고 있으므로,  Array처럼 사용하게 된다. 

    StringBuffer 클래스를 활용한 테스트

    public class StringBufferTest {
    
    	public static void main(String[] args) {
    
    		StringBuffer abc = new StringBuffer();
    		abc.append("abc"); 
    		abc.append(234);
    		
    		// abc 변수에 저장된 값을 출력함 with toString()
            System.out.println(abc);
            // abc에 저장된 총 문자열의 길이를 반환함.
    		System.out.println(abc.length());
            // abc에 저장된 문자열을 뒤로 뒤집어서 반환함.
    		System.out.println(abc.reverse());
            // abc에 저장된 특정 문자열을 인덱스로 접근해서, 그 부분을 원하는 문자열로 변경한다.
    		System.out.println(abc.replace(0, 2, "9999999999"));
    			
    	}
    }
    메서드 내용
    append() StringBuffer의 문자 배열에 문자열을 넣어준다.
    length() StringBuffer에 저장된 문자열의 길이를 반환해준다.
    reverse() StringBuffer에 저장된 문자열을 뒤집어서 반환해준다.
    replace() StringBuffer에 저장된 특정 위치의 문자열을 원하는 문자로 변경해준다. 

     

     

    댓글

    Designed by JB FACTORY