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