본문 바로가기
기타 지식들

스트링 풀(String Pool, 문자열 풀)

by 클레어몬트 2024. 8. 21.

ㅇ스트링 풀(String Pool, 문자열 풀): 메모리 관리 기법 중 하나로, 힙 영역에 있는 특별한 저장소

주로 문자열(String) 리터럴을 효율적으로 관리하기 위해 사용된다. 스트링 풀이 있는 언어에서는 동일한 문자열 리터럴이 여러 번 사용될 때, 각 리터럴이 별도로 메모리에 저장되지 않고, 이미 존재하는 동일한 문자열 리터럴을 재사용한다. 이렇게 함으로써 메모리 사용을 최적화하고 성능을 향상시킬 수가 있다.

 

※ 오션월드의 유수풀, 코딩조교실 인력풀 할 때의 그 풀(Pool)이다. 수영장이라는 의미를 기본적으로 갖고 있지만, 프로그래밍에서는 공용 자원을 모아둔 곳을 의미한다. 문자열 풀에서 문자를 찾을 때는 해시 알고리즘을 사용하기 때문에 속도가 매우 빠르다.

https://claremont.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-ep4-%ED%95%B4%EC%8B%9C%ED%85%8C%EC%9D%B4%EB%B8%94hashtable

 

[알고리즘] ep4) 해시테이블(hashtable)

선형검색에 반해 해시테이블의 검색시간은 평균적으로 상수시간이다 (사전에 삽입된 모든 키가 충돌하는 최악의 경우는 O(n))해시테이블의 상수시간이 가능한 이유는 "해시함수"를 통해 바로

claremont.tistory.com

  

[스트링 풀이 있는 주요 언어]

ㅇJava

Java에서 스트링 풀은 String 객체를 관리하는 데 사용된다. "Hello"와 같은 문자열 리터럴은 Java의 스트링 풀에 저장된다. 동일한 문자열 리터럴이 다시 사용될 경우, 새로운 객체를 생성하지 않고, 기존에 저장된 객체를 재사용한다. 

String str1 = "Hello";
String str2 = "Hello";

 

위 코드에서 str1과 str2는 동일한 메모리 주소를 가리키게 된다.

 

 

 

ㅇC#

C#에서도 유사한 개념이 있다. 컴파일러는 동일한 문자열 리터럴을 메모리에서 하나의 인스턴스로 관리하려고 한다. 즉, "Hello"라는 문자열 리터럴이 여러 곳에서 사용되더라도, 스트링 풀이 이를 관리하여 하나의 인스턴스로 재사용한다.

string str1 = "Hello";
string str2 = "Hello";

 

str1과 str2는 같은 메모리 주소를 참조하게 된다.

 

 

 

ㅇPython

Python에서는 특정 조건 하에 문자열 리터럴을 자동으로 풀링(pooling)한다. 이는 주로 짧은 문자열이나 알파벳, 숫자로만 이루어진 문자열에 적용된다.

str1 = "Hello"
str2 = "Hello"

 

여기서 str1과 str2는 같은 객체를 가리킬 수 있다.

 

 

 

스트링 풀의 장점:

  • 메모리 절약: 동일한 문자열 리터럴이 여러 번 사용될 때마다 메모리에 새로운 객체를 생성하지 않으므로 메모리를 절약할 수 있다.
  • 성능 향상: 문자열 비교 시, 참조 비교가 가능하므로 성능이 향상된다.

주의할 점:

  • Immutable(불변성): 스트링 풀을 사용하는 언어에서 문자열 객체는 일반적으로 불변(immutable)하다. 즉, 한 번 생성된 문자열은 변경할 수가 없다. 변경이 필요한 경우, 새로운 문자열 객체가 생성된다.
  • 리터럴만 적용: 대부분의 언어에서는 문자열 리터럴에만 스트링 풀이 적용되며, new 키워드를 사용하여 생성된 문자열에는 적용되지 않는다. 예를 들어, Java에서 new String("Hello")는 스트링 풀을 사용하지 않고, 새로운 객체를 생성한다.

 

'기타 지식들' 카테고리의 다른 글

썸머타임과 타임존 계산  (1) 2024.08.28
유지보수 vs 최적화  (0) 2024.08.22
사이드 이펙트(side effect)  (0) 2024.08.20
스코프의 중요성  (0) 2024.08.04
배열의 인덱스가 0부터 시작하는 이유  (0) 2024.07.24