자바 string pool이 무엇이며 “s”와 new String(“s”)의 차이점은 무엇이죠?

조회수 1986회

String Pool이 무엇을 뜻하죠? 그리고 아래 두 개의 선언문의 차이점이 무엇인가요:

String s = "hello";
String s = new String("hello");

JVM이 두 string을 저장하는 것에 차이점이 있나요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    String pool은 JVM이 string interning의 개념을 구현한 것입니다.

    컴퓨터 공학적으로 string interning은 각각의 고유한 string의 값(반드시 변하지 않는 값) 중에 하나의 복사본만 저장하는 메소드입니다. string을 interning하는 것은 string이 생성되거나 intern되는 것과 같이 많은 시간적 비용을 요구하는 작업에서 시간, 공간적 효율을 높여줍니다. String의 고유한 값은 string intern pool에 저장됩니다.

    기본적으로, string intern pool은 변하지 않는 string을 pool에 보관함으로써 runtime으로 하여금 메모리를 절약할 수 있게 해줍니다. 그래서 응용프로그램 영역에서 여러 개의 인스턴스를 새로 만드는 대신 이미 존재하는 string의 인스턴스를 재사용할 수 있도록 해주죠.

    흥미로운 말을 덧붙이자면, string을 interning 하는 것은 flyweight 디자인 패턴의 좋은 예시입니다 :

    Flyweight는 소프트웨어 디자인 패턴입니다. Fly weight은 오브젝트이며 유사한 다른 오브젝트들과 가능한 많은 데이터를 공유함으로써 메모리 사용을 최소화합니다. 간단하게 반복되는 작업들이 메모리 사용량을 초과해서 사용할 때 많은 양의 오브젝트를 사용하는 방법입니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)