ㅇ스트링 풀(String Pool, 문자열 풀): 메모리 관리 기법 중 하나로, 힙 영역에 있는 특별한 저장소
주로 문자열(String) 리터럴을 효율적으로 관리하기 위해 사용된다. 스트링 풀이 있는 언어에서는 동일한 문자열 리터럴이 여러 번 사용될 때, 각 리터럴이 별도로 메모리에 저장되지 않고, 이미 존재하는 동일한 문자열 리터럴을 재사용한다. 이렇게 함으로써 메모리 사용을 최적화하고 성능을 향상시킬 수가 있다.
※ 오션월드의 유수풀, 코딩조교실 인력풀 할 때의 그 풀(Pool)이다. 수영장이라는 의미를 기본적으로 갖고 있지만, 프로그래밍에서는 공용 자원을 모아둔 곳을 의미한다. 문자열 풀에서 문자를 찾을 때는 해시 알고리즘을 사용하기 때문에 속도가 매우 빠르다.
[알고리즘] 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")는 스트링 풀을 사용하지 않고, 새로운 객체를 생성한다. (이때는 Heap 영역을 사용)
'기타 지식들' 카테고리의 다른 글
KPI, 6 Sigma 개념 (0) | 2025.02.11 |
---|---|
썸머타임과 타임존 계산 (1) | 2024.08.28 |
스코프의 중요성 (0) | 2024.08.04 |
배열의 인덱스가 0부터 시작하는 이유 (1) | 2024.07.24 |
전역 변수의 일장일단 (0) | 2024.07.19 |