Java 문자열 풀이란?

이름에서 알 수 있듯이, 자바의 문자열 풀자바 힙 메모리에 저장된 문자열 풀입니다. 우리는 문자열이 자바에서 특별한 클래스이며, 새 연산자를 사용하여 문자열 객체를 생성할 수 있으며, 이중 인용부호 안에 값을 제공할 수 있다는 것을 알고 있습니다.

자바의 문자열 풀

여기 자바 힙 공간에서 문자열 풀이 유지되는 방법과 다양한 문자열 생성 방법을 사용할 때 발생하는 일을 명확하게 설명한 다이어그램이 있습니다. 문자열 풀은 자바에서 불변인 String과 String 인터닝 개념의 구현 덕분에 가능합니다. 문자열 풀은 또한 플라이웨이트 디자인 패턴의 예입니다. 문자열 풀은 문자열을 생성하는 데 더 많은 시간이 걸리지만 Java 런타임에 많은 공간을 절약하는 데 도움이 됩니다. 문자열을 생성하기 위해 이중 따옴표를 사용할 때, 먼저 문자열 풀에서 동일한 값의 문자열을 찾아 참조를 반환하거나, 찾지 못하면 새로운 문자열을 생성하고 그 참조를 반환합니다. 그러나 new 연산자를 사용하면 문자열 클래스에게 힙 공간에 새로운 문자열 개체를 생성하도록 강제합니다. intern() 메서드를 사용하여 문자열을 풀에 넣거나 동일한 값을 갖는 문자열 풀의 다른 문자열 개체를 참조할 수 있습니다. 다음은 문자열 풀 이미지에 대한 자바 프로그램입니다:

package com.journaldev.util;

public class StringPool {

    /**
     * Java String Pool example
     * @param args
     */
    public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");
        
        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
    }

}

위 프로그램의 출력은 다음과 같습니다:

s1 == s2 :true
s1 == s3 :false

권장 독서: Java 문자열 클래스

문자열 풀(String Pool)에 생성되는 문자열의 수는 얼마인가요?

가끔 자바 인터뷰에서 문자열 풀과 관련된 질문을 받을 수 있습니다. 예를 들어, 아래 문장에서 생성되는 문자열의 수는 얼마인가요;

String str = new String("Cat");

위 문장에서는 1개 또는 2개의 문자열이 생성됩니다. 이미 문자열 리터럴 “Cat”이 풀에 있는 경우에는 “str”이라는 문자열이 풀에만 생성됩니다. “Cat”이 풀에 없는 경우에는 먼저 풀에 생성되고 그 후에 힙 공간에 생성되므로 총 2개의 문자열 객체가 생성됩니다. 읽기: Java 문자열 인터뷰 질문

Source:
https://www.digitalocean.com/community/tutorials/what-is-java-string-pool