백엔드 공부하기/TIL

230804 TIL : String, StringBuilder, StringBuffer, text block

개발중인 감자 2023. 8. 4. 17:23

📌 230804 TIL : String, StringBuilder, StringBuffer, text block 

 


String 메소드

String str1 = new String("abc"); 힙에 인스턴스를 생성한다.
String str2 = "abc" 상수풀에 있는 값의 주소값을 참조한다. 

한번 생성된 String은 내부적으로 final로 선언되어있기 때문에 불변이다. 

그렇기 때문에 concat 메소드를 사용하여 문자열을 만드는 방법은 메모리 낭비가 될 수 있다. 

 

StringBuilder, StringBuffer 

내부적으로 가변적인 char[]를 멤버변수로 가진다. 

그래서 문자열을 여러번 연결 혹은 변경시 사용하면 유용하다. 새로운 인스턴스를 생성하지 않고 char[]을 변경한다.

단, StringBuffer는 멀티쓰레드 환경에서 동기화를 보장하기 때문에, 

단일 쓰레드 환경에서는 오히려 성능저하가 올 수 있어 StringBuilder 사용 하는것이 좋다. 

 

📝 사용 예제들 

public class StringTest {
    public static void main(String[] args) {
        String java = new String("java");
        String android = new String("android");
        System.out.println("(before concat) java hashcode: " + System.identityHashCode(java));
        java = java.concat(android);
        System.out.println("(after concat) java hashcode: " + System.identityHashCode(java));
        System.out.println(java+"\n");

        java = new String("java");
        android = new String("android");

        StringBuilder builder = new StringBuilder(java);
        System.out.println("(before append) builder hashcode: " + System.identityHashCode(builder));

        builder.append(android);
        System.out.println("(after append) builder hashcode: " + System.identityHashCode(builder));
        System.out.println(builder.toString());

    }
}

✏️ String 객체에 concat을 해주면 새로운 객체를 생성시키는 반면에, StringBuilder는 같은 객체 내에서 문자열 연결이 이루어졌다. 

 

Text block (java 13 이후)

""" 만 해주면 된다. Json, Html 문자열을 만드는데 유용하게 사용이 가능하다. 

 

📝 사용 예제

public class TextBlockTest {
    public static void main(String[] args) {
        String textBlocks = """
                Hello,
                hi,
                how r u
                """;
        System.out.println(textBlocks);
        System.out.println(getBlockOfHtml());


    }
    public static String getBlockOfHtml() {
        return """
                <html>
                    <body>
                        <span>example text</span>
                    </body>
                </html>
                """;
    }
}

줄바꿈을 넣어줄 필요없이 바로 해주니까 잘만 사용하면 유용할 듯 ㅎㅎ